如何在SQL中将多行组合成一列?

时间:2017-10-26 18:03:26

标签: mysql

我的代码如下所示:

select distinct
    HSP_ACCOUNT_ID
    ,TOT_ACCT_BAL
    ,DISCH_DATE_TIME
    ,UB_REV_CODE_ID
    ,PROC_CODE
    ,DATEDIFF(dd,act.DISCH_DATE_TIME,GETDATE()) as "Aging"

from HSP_ACCOUNT 

where 
    SERV_AREA_ID = 10
    and ACCT_BILLSTS_HA_C = '3' --Billed
    and DISCH_DATE_TIME >= '20171024'
    and TOT_ACCT_BAL is not null
    and TOT_ACCT_BAL <> 0

结果如下:

HSP_ACCOUNT_ID  TOT_ACCT_BAL    DISCH_DATE_TIME UB_REV_CODE_ID  PROC_CODE Aging
117244          830.03          10/24/2017  320         32074230  2
117244          830.03          10/24/2017  440         44008996  2
117244          830.03          10/24/2017  440         44008997  2
117244          830.03          10/24/2017  440         44008998  2
117244          830.03          10/24/2017  444         44492611  2

如何为每个UB_REV_CODE_ID的一行填充所有不同的PROC_CODEAccount ID

1 个答案:

答案 0 :(得分:0)

Group_concat()将完成所需的任务。

select distinct
    HSP_ACCOUNT_ID
    ,TOT_ACCT_BAL
    ,DISCH_DATE_TIME
    ,Group_concat(Distinct UB_REV_CODE_ID separator ' ')
    ,Group_concat(Distinct PROC_CODE separator ' ')
    ,DATEDIFF(dd,act.DISCH_DATE_TIME,GETDATE()) as "Aging"

from HSP_ACCOUNT 

where 
    SERV_AREA_ID = 10
    and ACCT_BILLSTS_HA_C = '3' --Billed
    and DISCH_DATE_TIME >= '20171024'
    and TOT_ACCT_BAL is not null
    and TOT_ACCT_BAL <> 0
Group by HSP_ACCOUNT_ID;

注意:如果所有其他列(2个代码除外)在特定帐户ID的每一行中具有相同的值,则只应使用上述解决方案。

希望它有所帮助!