需要SQL Server查询来聚合多行数据

需要SQL Server查询来聚合多行数据,sql,sql-server-2012,aggregate,Sql,Sql Server 2012,Aggregate,我有一个包含客户信息的表,我需要将数据聚合到一行中。我的唯一标识符是我的客户编号。我怎样才能做到这一点?以下是我目前的数据: ID CUST_NUM CUSTOMER_NAME BOUGHT_PRODUCT_A BOUGHT_PRODUCT_B BOUGHT_PRODUCT_C BOUGHT_PRODUCT_D 1 125654 IHOP

我有一个包含客户信息的表,我需要将数据聚合到一行中。我的唯一标识符是我的客户编号。我怎样才能做到这一点?以下是我目前的数据:

        ID  CUST_NUM    CUSTOMER_NAME                       BOUGHT_PRODUCT_A    BOUGHT_PRODUCT_B  BOUGHT_PRODUCT_C  BOUGHT_PRODUCT_D
        1   125654      IHOP                                NULL                NULL              NULL              YES
        2   125654      I.H.O.P.                            YES                 NULL              NO                YES
        3   125654      IHOP INC.                           YES                 NULL              NULL              NULL
这是我想要的结果:

        ID  CUST_NUM    CUSTOMER_NAME          BOUGHT_PRODUCT_A    BOUGHT_PRODUCT_B  BOUGHT_PRODUCT_C   BOUGHT_PRODUCT_D
        1   125654      IHOP,I.H.O.P.,IHOP INC. NULL                NULL              NULL              YES
您可以使用窗口功能:

select distinct CUST_NUM,
       stuff ((select distinct ',' +CUSTOMER_NAME  
               from table 
               where t.CUST_NUM = CUST_NUM for xml path('')
               ), 1,1, ''
             ) as CUSTOMER_NAME, 
       first_value(BOUGHT_PRODUCT_A) over (partition by CUST_NUM order by ID) BOUGHT_PRODUCT_A,
       first_value(BOUGHT_PRODUCT_B) over (partition by CUST_NUM order by ID) BOUGHT_PRODUCT_B,
       first_value(BOUGHT_PRODUCT_C) over (partition by CUST_NUM order by ID) BOUGHT_PRODUCT_C,
       first_value(BOUGHT_PRODUCT_D) over (partition by CUST_NUM order by ID) BOUGHT_PRODUCT_D
from table t;

例如,购买的产品在聚合结果中的价值是什么?如何将YES、YES和NULL分组为YES?YES表示我的客户以不同的名称购买了产品,只要在任何一行中该产品有YES,结果将是YES。嗨,Yogesh,我遇到了以下错误:“first_value”附近的语法不正确。@Teeko。缺少逗号。