2012-03-12 34 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

相关问题