2014-10-31 42 views
0

我的查詢出現問題,我讀了一些關於此的suggestions,但沒有運氣。如果使用INNER JOIN指定SELECT DISTINCT,則ORDER BY項必須出現在選擇列表中

我有3個表格,階段,階段和時間表。

附表列:

ID,級ID,PhaseId,持續時間,ScheduleType

舞臺列:

級ID,藝名

階段列:

PhaseId,PhaseName

這裏就是我試圖讓:

DECLARE @actual_startdate date = '2014-01-10' 
SELECT 
    DISTINCT (C.PhaseName), 
    A.Duration, 
    @actual_startdate StartDate, 
    DATEADD(dd, A.Duration, @actual_startdate) EndDate 
FROM Schedule A 
INNER JOIN Stages B 
ON A.StageId = B.StageId 
INNER JOIN Phase C 
ON A.PhaseId = C.PhaseId 
WHERE A.Schedule = '2' and B.Stage = '0.25' 
ORDERBY B.StageId DESC; 

而且我得到這個錯誤:

ORDER BY項目必須出現在選擇列表中,如果指定了SELECT DISTINCT。

我試過其他建議,我的研究使用GROUP BY子句,而不是不同,但仍然沒有運氣。

我嘗試這樣做:

DECLARE @actual_startdate date = '2014-01-10' 
SELECT 
    C.PhaseName, 
    A.Duration, 
    @actual_startdate StartDate, 
    DATEADD(dd, A.Duration, @actual_startdate) EndDate 
FROM Schedule A 
INNER JOIN Stages B 
ON A.StageId = B.StageId 
INNER JOIN Phase C 
ON A.PhaseId = C.PhaseId 
WHERE A.Schedule = '2' and B.Stage = '0.25' 
GROUP BY C.PhaseName 
order BY B.StageId DESC; 

,並獲得新的錯誤:

,因爲它不是在聚合函數或載列「Schedule.Duration」在選擇列表中無效GROUP BY子句。

希望有人能幫助我。謝謝! :)

回答

1

你需要在組添加A.Duration By子句

DECLARE @actual_startdate date = '2014-01-10' 
SELECT 
    C.PhaseName, 
    A.Duration, 
    @actual_startdate StartDate, 
    DATEADD(dd, A.Duration, @actual_startdate) EndDate 
FROM Schedule A 
INNER JOIN Stages B 
ON A.StageId = B.StageId 
INNER JOIN Phase C 
ON A.PhaseId = C.PhaseId 
WHERE A.Schedule = '2' and B.Stage = '0.25' 
GROUP BY C.PhaseName,A.Duration,B.StageId 
order BY B.StageId DESC; 
+0

我也試過這個,但得到了,因爲它不包含在這個錯誤「列‘Stages.StageId’是在ORDER BY子句無效要麼是聚合函數,要麼是GROUP BY子句。' – jomsk1e 2014-10-31 07:48:04

+0

@ jomsk1e現在更新 – 2014-10-31 07:50:50

+0

fetl如此非常愚蠢! LOL非常感謝! :) 6分鐘接受你的回答XD – jomsk1e 2014-10-31 07:52:10

相關問題