2012-03-12 60 views
0

下面的查詢工作在MS Access,但它並沒有在MS SQL Server的工作:「附近關鍵字‘組’語法錯誤」爲什麼在MS Access中工作的SQL查詢不能在SQL Server中工作?

SELECT 
    tblSession.PatientID as PID, 
    max(tblSession.SessionAttend) - 
    min(tblSession.SessionAttend) + 1 as NumSA, 
    max(tblSession.SessionSched) - 
    min(tblSession.SessionSched) + 1 as NumSS FROM 
    (
    SELECT top 100 percent 
     tblSession.PatientID, 
     tblSession.SessionNumber, 
     tblSession.SessionDate, 
     tblSession.SessionAttend, 
     tblSession.SessionSched FROM 
     tblPatient INNER JOIN tblSession ON 
     tblPatient.PatientID = tblSession.PatientID) WHERE 
     (tblSession.SessionDate >= '12/8/2010') AND 
     (tblSession.SessionDate <= '5/18/2011') AND 
     (tblSession.Status = '2') ORDER BY 
      tblSession.PatientID, tblSession.SessionNumber 
) GROUP BY tblSession.PatientID 

在SQL Server,它給人的錯誤當我將鼠標懸停在GROUP關鍵字上時,工具提示顯示「GROUP」附近的語法錯誤,期望AS,ID或QUOTED_ID。「我不明白。任何人都可以告訴我如何使這個查詢工作?

+5

你需要一個別名,由t.PatientId子查詢'從(...)T組' – dotjoe 2012-03-12 18:37:19

+0

我相信你嵌套SELECT需要一個別名。因此最後一行「)GROUP BY tblSession.PatientID」需要類似於「)AS tbl GROUP BY tblSession.PatientID」。我可能是錯的... – 2012-03-12 18:42:14

+0

無奈的問題,但爲什麼你有'最高百分之一百'? – 2012-03-12 18:48:29

回答

2

()派生表需要的別名,在SELECT列表中的列引用相應的更新:

SELECT top 100 percent 
    ALIASNAME.PatientID as PID, 
    max(ALIASNAME.SessionAttend) - 
    min(ALIASNAME.SessionAttend) + 1 as NumSA, 
    max(ALIASNAME.SessionSched) - 
    min(ALIASNAME.SessionSched) + 1 as NumSS FROM 
    (
    SELECT top 100 percent 
     tblSession.PatientID, 
     ... 
     ... 
     ... 
     ... 
      tblSession.PatientID, tblSession.SessionNumber 
    -- This derived table needs an alias 
) ALIASNAME 
    GROUP BY ALIASNAME.PatientID 
+1

他還需要更新他的字段別名,因爲我猜'tblsession'無法解析。 – JNK 2012-03-12 18:39:21

+0

@JNK是的,編輯感謝。 – 2012-03-12 18:40:41