带有聚合的错误语法左联接子查询

时间:2020-07-23 22:17:46

标签: sql sql-server tsql join subquery

我正在尝试通过SQL Server运行以下查询。我在','附近不断收到不正确的语法错误,但是我无法弄清楚哪个逗号不正确。我对SQL还是很陌生,但特别是仍在尝试找出更复杂的查询。

SELECT
   lastdate.[Date of Record],
   billing.[Club Code],
   billing.[Club Name],
   lastdate.[Member Code with Name],
   billing.[Activity Code],
   billing.[Category Code],
   billing.[Dues Net Amount],
   billing.[Dues Gross Amount],
   billing.[Member Type Code],
   billing.[Member Join Date],
   billing.[Member Status Rule Code]
FROM
    [dbo].[view_Club_Transactions_0100_(15) Dues_Summary] billing
LEFT JOIN
        (MAX(lastdate.[Date of Record]) dor,
        lastdate.[Member Code with Name]
    FROM
        [dbo].[view_Club_Transactions_0100_(15) Dues_Summary] lastdate
    GROUP BY
        lastdate.[Member Code with Name])
ON
    billing.[Member Code with Name]=lastdate.[Member Code with Name]
WHERE
   ([Member Status Rule Code] = N'ZRESIGN')
   AND
   ([Activity Code] = N'DUES')

1 个答案:

答案 0 :(得分:1)

您的子查询缺少SELECT关键字...还有一个别名。您还需要将date列的子查询列别名与外部查询对齐:

SELECT
    lastdate.[Max Date of Record],      ---------------> column alias
    billing.[Club Code],
    ...
FROM [dbo].[view_Club_Transactions_0100_(15) Dues_Summary] billing
LEFT JOIN (
    SELECT              -------------------------------> "SELECT" keyword
        MAX([Date of Record]) [Max Date of Record], ---> column alias
        [Member Code with Name]
    FROM [dbo].[view_Club_Transactions_0100_(15) Dues_Summary]
    GROUP BY [Member Code with Name]
) lastdate              -------------------------------> subquery alias
ON billing.[Member Code with Name]=lastdate.[Member Code with Name]
WHERE ...

我实际上怀疑您可以跳过自我联接,而是使用窗口函数。可能是:

SELECT *
FROM (
    SELECT
       MAX([Date of Record]) OVER(PARTITION BY [Member Code with Name]) [Max Date of Record],
       [Club Code],
       [Club Name],
       [Member Code with Name],
       [Activity Code],
       [Category Code],
       [Dues Net Amount],
       [Dues Gross Amount],
       [Member Type Code],
       [Member Join Date],
       [Member Status Rule Code]
    FROM [dbo].[view_Club_Transactions_0100_(15) Dues_Summary] 
) t
WHERE [Member Status Rule Code] = N'ZRESIGN' AND [Activity Code] = N'DUES'
相关问题