为什么在MS Access中工作的SQL查询在SQL Server中不工作?
以下查询适用于MS Access,但不适用于MS SQL Server:为什么在MS Access中工作的SQL查询在SQL Server中不工作?,sql,sql-server,tsql,Sql,Sql Server,Tsql,以下查询适用于MS Access,但不适用于MS 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
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关键字上时,工具提示会在“GROUP”附近显示不正确的语法。预期为、ID或引用的ID。我不明白。有人能告诉我如何进行此查询吗?中的派生表需要一个别名,其在选择列表中的列引用也相应更新:
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
您需要来自的子查询的别名。。。我相信你需要一个别名。因此,tblSession.PatientID的最后一个行组需要类似于tblSession.PatientID的tbl组。我可能错了……这是一个无关紧要的问题,但为什么你会有100%的排名?我见过100%排名靠前的人在视图中添加订单。这里似乎没有必要…@dotjoe在视图中也似乎没有必要,因为SQL Server不一定要遵守ORDER BY-ORDER BY仅允许与TOP组合,并指示要包括哪些行,而不是显示它们的顺序。这是一个在2000年起作用的老把戏,但在今天的优化器中不起作用——至少在默认情况下不起作用——在本例中,今天的优化器实际上只是丢弃了TOP和orderby。根据该视图保证ORDER BY的唯一方法是在外部查询上应用ORDER BY。他还需要更新他的字段别名,因为我猜tblsession无法解析。