2014-03-31 51 views
0

我一直得到一个不正确的语法靠近单词ON,这段代码来自于上一篇文章的建议更改,我试图找到错误的位置,至今我没有运气弄清楚我缺少什么标点符号。代码是不正确的语法错误在单词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, 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; 
+1

'WHERE ROWNUM = 1)ON AC.TMS_ID = CD.EMPLOYEE_ID;'看起来像子查询的别名闭幕后失踪' )'。这对于我来说过于密集,以至于在没有分析的情况下直观地找出应该是哪个别名('AC'或'CD'),但是您可能正在寻找'WHERE RowNum = 1)AS CD ON AC.TMS_ID = CD.EMPLOYEE_ID; ' –

+0

我试过并仍然出现错误 – user2119980

+0

学习CTE(公用表表达式)。如果你这样做不会是一个问题。 –

回答

0

有一些不妥此查询(好吧,没有什么新的..)。最终的子查询中没有别名,但似乎还有更多。

简化和适当的缩进形式可能会帮助您察觉问题:

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; 
0

首先,所有子查询都需要一个别名。所以,给子查询一个名字。我认为它是这样的:

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 
+0

THAT也不起作用,它给我所有领域的错误 – user2119980

0

这就是你的查询应该如何看起来像。如果你使用CTE,它很容易阅读,而且容易发现错误。在CTE http://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx

文档

;WITH Query1 
      AS (
       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' 
      ), 
     Query2 
      AS (
       SELECT Employee_ID 
        ,Meeting_Readiness_Rating 
        ,Manager_Readiness_Rating 
        ,Meeting_End_Date 
        ,EmployeeFeedback 
        ,DevelopmentForEmployee1 
        ,DevelopmentForEmployee2 
        ,DevelopmentForEmployee3 
        ,DevelopmentForEmployee4 
        ,DevelopmentForEmployee5 
        ,Justification 
        ,Changed 
        ,Notes 
        ,ROW_NUMBER() OVER (PARTITION BY Employee_ID ORDER BY Meeting_End_Date DESC) AS Rn 
       FROM Query1 AS q1 
      ) 
    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 Query2 AS cd 
      ON AC.TMS_ID = CD.EMPLOYEE_ID 
       AND cd.rn = 1 
相关问题