Sql 上的单词附近出现语法错误
我经常在单词ON附近发现一个不正确的语法,这段代码来自上一篇文章的一个建议更改,我正试图找到错误所在,到目前为止,我还没有找到我缺少的标点符号。代码是Sql 上的单词附近出现语法错误,sql,sql-server,Sql,Sql Server,我经常在单词ON附近发现一个不正确的语法,这段代码来自上一篇文章的一个建议更改,我正试图找到错误所在,到目前为止,我还没有找到我缺少的标点符号。代码是 SELECT AC.REG_NR, AC.DIS_NR, AC.GEMSID, AC.TMS_ID, AC.EMP_NA, AC.EMP_SEX_TYP_CD, AC.EMP_EOC_GRP_TYP_CD, AC.DIV_NR, AC.CTR_NR, AC.JOB_CLS_CD_DSC_TE, AC.JOB_GRP_CD,
SELECT AC.REG_NR, AC.DIS_NR, AC.GEMSID, AC.TMS_ID, AC.EMP_NA, AC.EMP_SEX_TYP_CD, AC.EMP_EOC_GRP_TYP_CD, AC.DIV_NR, AC.CTR_NR,
AC.JOB_CLS_CD_DSC_TE, AC.JOB_GRP_CD, AC.Job_Function, AC.Job_Group, AC.Meeting_Readiness_Rating, AC.Manager_Readiness_Rating, CD.Employee_ID,
CD.Meeting_Readiness_Rating AS Expr1, CD.Manager_Readiness_Rating AS Expr2, CD.Meeting_End_Date, CD.EmployeeFeedback,
CD.DevelopmentForEmployee1, CD.DevelopmentForEmployee2, CD.DevelopmentForEmployee3, CD.DevelopmentForEmployee4, CD.DevelopmentForEmployee5,
CD.Justification, CD.Changed, CD.Notes
FROM dbo.AC_Source AS AC INNER JOIN
(SELECT EmployeeID AS Employee_ID, MeetingReadinessLevel AS Meeting_Readiness_Rating, ManagerReadinessLevel AS Manager_Readiness_Rating,
logdate AS Meeting_End_Date, EmployeeFeedback, DevelopmentForEmployee1, DevelopmentForEmployee2, DevelopmentForEmployee3,
DevelopmentForEmployee4, DevelopmentForEmployee5, Justification, Changed, Notes
FROM (SELECT EmployeeID AS Employee_ID, MeetingReadinessLevel AS Meeting_Readiness_Rating, ManagerReadinessLevel AS Manager_Readiness_Rating,
logdate AS Meeting_End_Date, EmployeeFeedback, DevelopmentForEmployee1, DevelopmentForEmployee2, DevelopmentForEmployee3,
DevelopmentForEmployee4, DevelopmentForEmployee5, Justification, Changed, Notes, ROW_NUMBER() OVER (PARTITION BY EmployeeID ORDER BY Meeting_End_Date DESC) As RowNum
FROM (SELECT EmployeeID AS Employee_ID, MeetingReadinessLevel AS Meeting_Readiness_Rating, ManagerReadinessLevel AS Manager_Readiness_Rating,
logdate AS Meeting_End_Date, EmployeeFeedback, DevelopmentForEmployee1, DevelopmentForEmployee2, DevelopmentForEmployee3,
DevelopmentForEmployee4, DevelopmentForEmployee5, Justification, Changed, Notes
FROM dbo.AC_CDData_1
UNION ALL
SELECT Employee_ID, Meeting_Readiness_Rating, Manager_Readiness_Rating, Meeting_End_Date, '' AS EmployeeFeedback, '' AS DevelopmentForEmployee1,
'' AS DevelopmentForEmployee2, '' AS DevelopmentForEmployee3, '' AS DevelopmentForEmployee4, '' AS DevelopmentForEmployee5, '' AS Justification,
'' AS Changed, '' AS Notes
FROM dbo.TMS_Data_Latest_Career_Meeting_Rating
WHERE (Plan_Year = '2013')) AS InnerSelect) AS CD ON AC.TMS_ID = CD.Employee_ID
WHERE RowNum = 1)
ON AC.TMS_ID = CD.EMPLOYEE_ID;
首先,所有子查询都需要别名。因此,给子查询一个名称。我认为是这样的:
SELECT AC.REG_NR, AC.DIS_NR, AC.GEMSID, AC.TMS_ID, AC.EMP_NA, AC.EMP_SEX_TYP_CD,
AC.EMP_EOC_GRP_TYP_CD, AC.DIV_NR, AC.CTR_NR,
AC.JOB_CLS_CD_DSC_TE, AC.JOB_GRP_CD, AC.Job_Function, AC.Job_Group,
AC.Meeting_Readiness_Rating, AC.Manager_Readiness_Rating, CD.Employee_ID,
CD.Meeting_Readiness_Rating AS Expr1, CD.Manager_Readiness_Rating AS Expr2,
CD.Meeting_End_Date, CD.EmployeeFeedback,
CD.DevelopmentForEmployee1, CD.DevelopmentForEmployee2, CD.DevelopmentForEmployee3,
CD.DevelopmentForEmployee4, CD.DevelopmentForEmployee5,
CD.Justification, CD.Changed, CD.Notes
FROM dbo.AC_Source AS AC INNER JOIN
(SELECT EmployeeID AS Employee_ID, MeetingReadinessLevel AS Meeting_Readiness_Rating, ManagerReadinessLevel AS Manager_Readiness_Rating,
logdate AS Meeting_End_Date, EmployeeFeedback, DevelopmentForEmployee1, DevelopmentForEmployee2, DevelopmentForEmployee3,
DevelopmentForEmployee4, DevelopmentForEmployee5, Justification, Changed, Notes
FROM (SELECT EmployeeID AS Employee_ID, MeetingReadinessLevel AS Meeting_Readiness_Rating,
ManagerReadinessLevel AS Manager_Readiness_Rating,
logdate AS Meeting_End_Date, EmployeeFeedback, DevelopmentForEmployee1,
DevelopmentForEmployee2, DevelopmentForEmployee3,
DevelopmentForEmployee4, DevelopmentForEmployee5, Justification, Changed,
Notes,
ROW_NUMBER() OVER (PARTITION BY EmployeeID ORDER BY Meeting_End_Date DESC) As RowNum
FROM (SELECT EmployeeID AS Employee_ID, MeetingReadinessLevel AS Meeting_Readiness_Rating, ManagerReadinessLevel AS Manager_Readiness_Rating,
logdate AS Meeting_End_Date, EmployeeFeedback, DevelopmentForEmployee1, DevelopmentForEmployee2, DevelopmentForEmployee3,
DevelopmentForEmployee4, DevelopmentForEmployee5, Justification, Changed, Notes
FROM dbo.AC_CDData_1
UNION ALL
SELECT Employee_ID, Meeting_Readiness_Rating, Manager_Readiness_Rating, Meeting_End_Date, '' AS EmployeeFeedback, '' AS DevelopmentForEmployee1,
'' AS DevelopmentForEmployee2, '' AS DevelopmentForEmployee3, '' AS DevelopmentForEmployee4, '' AS DevelopmentForEmployee5, '' AS Justification,
'' AS Changed, '' AS Notes
FROM dbo.TMS_Data_Latest_Career_Meeting_Rating
WHERE (Plan_Year = '2013')) AS InnerSelect
) cd
) cd
ON AC.TMS_ID = CD.EMPLOYEE_ID and rownum = 1
这就是您的查询应该是什么样子。如果您使用CTE,它很容易阅读,也很容易发现错误 关于CTE的文件
此查询有问题(好的,没有新内容..)。最后一个子查询上没有别名,但似乎还有更多别名 简化且适当缩进的表单可能有助于您发现问题:
SELECT x
FROM dbo.AC_Source AS AC
INNER JOIN (
SELECT x
FROM (
SELECT x, ROW_NUMBER() OVER (PARTITION BY EmployeeID ORDER BY Meeting_End_Date DESC) As RowNum
FROM (
SELECT x
FROM dbo.AC_CDData_1
UNION ALL
SELECT x
FROM dbo.TMS_Data_Latest_Career_Meeting_Rating
WHERE Plan_Year = '2013'
) AS InnerSelect
) AS CD ON AC.TMS_ID = CD.Employee_ID
WHERE RowNum = 1
) ON AC.TMS_ID = CD.EMPLOYEE_ID;
其中RowNum=1)在AC.TMS_ID=CD.EMPLOYEE_ID上
关闭后,子查询的别名似乎丢失了)
。这对我来说太密集了,无法在不进行分析的情况下直观地确定应该是哪个别名(AC
,或CD
),但您可能正在寻找,其中RowNum=1)作为AC.TMS_ID=CD.EMPLOYEE_ID上的CD代码>我试过了,但仍然得到了errorLearn CTE(公共表表达式)。如果这样做也不会有问题。这也不起作用,它会给我所有字段的错误
SELECT x
FROM dbo.AC_Source AS AC
INNER JOIN (
SELECT x
FROM (
SELECT x, ROW_NUMBER() OVER (PARTITION BY EmployeeID ORDER BY Meeting_End_Date DESC) As RowNum
FROM (
SELECT x
FROM dbo.AC_CDData_1
UNION ALL
SELECT x
FROM dbo.TMS_Data_Latest_Career_Meeting_Rating
WHERE Plan_Year = '2013'
) AS InnerSelect
) AS CD ON AC.TMS_ID = CD.Employee_ID
WHERE RowNum = 1
) ON AC.TMS_ID = CD.EMPLOYEE_ID;