请帮忙!
我的部分查询出现语法错误,无法弄清楚错误。 Intellisense不会对我使用的数据库起作用。我试图用括号括起子查询,但这仍然会引发语法错误。有人能发现问题吗?我认为它是一个缺失的括号或其他东西,但我无法找到任何子查询的语法。
请注意,我尝试做的是将现有的MS Access报告转换为SQL,由于相互嵌入大量的查询来生成数据,因此证明非常困难。任何与“Qry”相关的事情都是' qry'是对Access中某些内容的引用。此查询针对用于跟踪员工进出门的数据库,并用于出勤报告。不幸的是,因为它不是内部系统,所以我无法访问数据库模式,因此我很难自己构建查询。我可以发布完整的东西但没有上下文它可能没有多大意义?现在我将发布部分查询。
我得到的错误:
>Msg 156, Level 15, State 1, Line 21
>Incorrect syntax near the keyword 'RIGHT'.
>Msg 156, Level 15, State 1, Line 27
>Incorrect syntax near the keyword 'RIGHT'.
>Msg 156, Level 15, State 1, Line 34
>Incorrect syntax near the keyword 'ON'.
下面的SQL查询的一部分。请注意,第21行是第一个' RIGHT JOIN'是。
INNER JOIN (
SELECT vw_ReportQuery.UserID
,vw_ReportQuery.[6000UserName]
,vw_ReportQuery.[6007EventTime]
,CAST([6007EventTime] AS DATETIME) AS SDate
,DatePart(HOUR, [6007EventTIme]) AS hoursBetween
,vw_ReportQuery.[6002DoorName]
FROM vw_ReportQuery
WHERE (
((vw_ReportQuery.[6000UserName]) = 'Smith, Jon')
AND (
(vw_ReportQuery.[6007EventTime]) >= '1/1/2016 00:00:00'
AND (vw_ReportQuery.[6007EventTime]) <= '1/30/2016 00:00:00'
)
AND (
(DatePart(Hour, [6007EventTIme])) BETWEEN 12
AND 14
)
AND (
(vw_ReportQuery.[6002DoorName]) LIKE 'Gnd floor Rear Goods Door (out)'
OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Staff Entrance (out)'
OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Sub-let entrance (out)'
OR (
(vw_ReportQuery.[6002DoorName]) LIKE 'Gnd floor Rear Goods Door (in)'
OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Staff Entrance (in)'
OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Sub-let entrance (in)'
)
)
)
) AS qryTestSelectedLunchPeriodHas_1 ON qryTestSelectedLunchPeriodHas.SDate = qryTestSelectedLunchPeriodHas_1.SDate
GROUP BY qryTestSelectedLunchPeriodHas.UserID
,qryTestSelectedLunchPeriodHas.[6000UserName]
,qryTestSelectedLunchPeriodHas.SDate ) -- as qryTestLunchPeriodHasFinal
RIGHT JOIN (
SELECT vw_ReportQuery.UserID
,vw_ReportQuery.[6000UserName]
,vw_ReportQuery.[6007EventTime]
,Cast([6007EventTime] AS DATETIME) AS SDate
FROM vw_ReportQuery
WHERE (
((vw_ReportQuery.[6000UserName]) = 'Smith, Jon')
AND (
(vw_ReportQuery.[6007EventTime]) >= '1/1/2016 00:00:00'
AND (vw_ReportQuery.[6007EventTime]) <= '1/30/2016 00:00:00'
)
)
RIGHT JOIN (
SELECT vw_ReportQuery.UserID
,vw_ReportQuery.[6000UserName]
,vw_ReportQuery.[6007EventTime]
,Cast([6007EventTime] AS DATETIME) AS SDate
FROM vw_ReportQuery
WHERE (
((vw_ReportQuery.[6000UserName]) = 'Smith, Jon')
AND (
(vw_ReportQuery.[6007EventTime]) >= '1/1/2016 00:00:00'
AND (vw_ReportQuery.[6007EventTime]) <= '1/30/2016 00:00:00'
)
)
) ON qrySelectedDatesAndUser.SDate = qrySelectedDatesAndUser_1.SDate
) ON qryTestLunchPeriodHasFinal.SDate = qrySelectedDatesAndUser.SDate
GROUP BY qrySelectedDatesAndUser.[6000UserName]
,qrySelectedDatesAndUser_1.SDate
,qryTestLunchPeriodHasFinal.First
,qryTestLunchPeriodHasFinal.Last
,qryTestLunchPeriodHasFinal.LunchPeriod
答案 0 :(得分:1)
您已将子查询别名注释掉:-- as qryTestLunchPeriodHasFinal
。而你的其他子查询也需要别名。我敢打赌那是你的问题。
此外,而不是
OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Staff Entrance (out)'
OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Sub-let entrance (out)'
OR ....
你可以简单地做
OR vw_ReportQuery.[6002DoorName] IN ('Gnd flr Staff Entrance (out)', 'Gnd flr Sub-let entrance (out)', {etcetera})