首页 > 解决方案 > 使用 GROUP BY 子句时的 T-SQL Lead () 函数问题

问题描述

我正在尝试将多个表中的数据插入到一个结果表中。

但是,由于我在/ - 中使用该Lead()函数来创建其中一个字段,因此出现错误:SELECTGROUP BY

窗口函数只能出现在 SELECT 或 ORDER BY 子句中

我应该如何修改我的代码才能正常工作?

      USE [WH];
      INSERT INTO [exp].[Profile] (

                   [MedicalConditionFK]
                 , [EHRProgramFK]
                 , [EffectiveDate]
                 , [ExpirationDate]

               )

       SELECT 
              c.medicalcondition_id
            , Max(ISNULL(epi.[EHRProgramFK], -1)) AS [EHRProgramFK]
            , p.[effective_date] AS [EffectiveDate]
            , DateAdd(day, -1, lead (p.[effective_date], 1, '2050-12-31') OVER 
                      (partition by p.[client_id], c.[medicalcondition_id] Order By 
                                                   p.[effective_date])) AS [ExpirationDate] 

      FROM 
            [exp].[Condition] c
            INNER JOIN [exp].[Medical] p ON 
                                         c.[ClientMedicalProfile_id] = p.[ClientMedicalProfile_id]
            LEFT JOIN [exp].[Episode] epi ON 
                                         (p.[effective_date] BETWEEN epi.[AdmissionDate] 
                                          AND epi.[DischargeDate] and epi.[DBCode] = 'CS-SM')

      WHERE
            (p.[effective_date] IS NOT NULL)


      GROUP BY
              c.medicalcondition_id
            , p.[effective_date]
            , DateAdd(day, -1, lead (p.[effective_date], 1, '2050-12-31') OVER 
                  (partition by p.[client_id], c.[medicalcondition_id] Order By p.[effective_date])) 

标签: sql-servertsqlselectsql-insertwindow-functions

解决方案


为了使您的查询有效,您需要将窗口函数中使用的列放在group by子句中(而不是窗口函数本身)。

基本上这意味着您必须添加列client_id

GROUP BY
    c.medicalcondition_id,
    p.[effective_date],
    p.[client_id]

虽然这将避免语法错误,但我无法判断这是否会产生您想要的结果集。为此,您可能需要提出一个新问题,提供适当的样本数据和所需的结果。


推荐阅读