-1

私は以下を持っています

(SELECT 
    ts.PID, 
    tt.ID, 
    tt.ItemOrder,
    tt.DisplayVal as Task, 
    tt.Responsible as  ResParty, 
    tt.DaysDue, 
    DATEADD(day, tt.DaysDue, PgStartDate) as DueDate,
    ts.spate As ActualDate , 
    ps.PgStartDate as ProgramDate
FROM tblTimeline tt 
CROSS JOIN tblSers ts
JOIN PG ps ON ps.PID = ts.PId
WHERE tt.ID = 2 
AND ps.cancelled = 0 ) 

t1
INNER JOIN(

SELECT 
    ts.PID,  
    max(DATEADD(day, tt.DaysDue, PgStartDate)) as DueDate 
FROM tblTimeline tt 
CROSS JOIN tblSers ts
JOIN PG ps on ps.PID = ts.PId
WHERE tt.ID = 2 
AND ps.cancelled = 0) 

t2
  ON t1.PID = t2.PID 
  AND t1.DueDate = t2.DueDate

で、私が持っているのは、特定の行のt1重複です。PID, DueDate

それぞれの行全体を取得するのが好きですPID。Maxを持つ行を表示するのが好きDueDateです。

t1、t2の近くで間違った構文を取得します

4

2 に答える 2

1

最初のステートメントGROUP BYの開始だけでなく、a も欠落しているようです:SELECT

SELECT *  --missing this
FROM      --missing this
(
  select ts.PID, 
     tt.ID, 
     tt.ItemOrder,
     tt.DisplayVal as Task,
     tt.Responsible as  ResParty, 
     tt.DaysDue, 
     DATEADD(day, tt.DaysDue, PgStartDate) as DueDate,
     ts.spate As ActualDate , 
     ps.PgStartDate as ProgramDate
  from tblTimeline tt 
  cross join tblSers ts
  join PG ps on ps.PID = ts.PId
  where tt.ID = 2 and ps.cancelled = 0 
) t1
inner join 
(
  select ts.PID,  
    max(DATEADD(day, tt.DaysDue, PgStartDate)) as DueDate 
  from tblTimeline tt cross join tblSers ts
  join PG ps 
    on ps.PID = ts.PId
  where tt.ID = 2 and ps.cancelled = 0 
  GROUP BY ts.PID   --missing this
) t2
  on t1.PID = t2.PID 
  and t1.DueDate = t2.DueDate
于 2012-08-10T01:39:50.867 に答える
0

Group By がありません。

select ts.PID,  max(DATEADD(day, tt.DaysDue, PgStartDate)) as DueDate 
   from tblTimeline tt cross join tblSers ts
   join PG ps on ps.PID = ts.PId
   where tt.ID = 2 and ps.cancelled = 0
   group by ts.PID
于 2012-08-10T01:32:11.090 に答える