繁体   English   中英

将三行的输出合并到sql中的单个值

[英]to combine the output of three rows in to single value in sql

通过使用以下查询,输出显示如下

SELECT dlr_acc_acct_id , (   NVL (dlr_jan, 'D')
               || NVL (dlr_feb, 'D')
               || NVL (dlr_mar, 'D')
               || NVL (dlr_apr, 'D')
               || NVL (dlr_may, 'D')
               || NVL (dlr_jun, 'D')
               || NVL (dlr_jul, 'D')
               || NVL (dlr_aug, 'D')
               || NVL (dlr_sep, 'D')
               || NVL (dlr_oct, 'D')
               || NVL (dlr_nov, 'D')
               || NVL (dlr_dec, 'D')
              ) payment_history_profile
               FROM daybreak.accounts acc, daybreak.delinquency_ratings dr
 WHERE  dlr_acc_acct_id = acc.ACC_ACCT_ID 
 and dlr_acc_acct_id= '20090305975688'
 and dlr_year in (2011,2010,2009)

输出是

DLR_ACC_ACCT_ID,PAYMENT_HISTORY_PROFILE
20090305975688,DD0000000000
20090305975688,000000000000
20090305975688,0000000DDDDD

我的预期输出是

dlr_acc_acct_id payment_history_profile
20090305975688  DD00000000000000000000000000000DDDDD

如果只需要一行,则需要聚合:

SELECT dlr_acc_acct_id,
       (NVL(MAX(dlr_jan), 'D')
               || NVL(MAX(dlr_feb), 'D')
               || NVL(MAX(dlr_mar), 'D')
               || NVL(MAX(dlr_apr), 'D')
               || NVL(MAX(dlr_may), 'D')
               || NVL(MAX(dlr_jun), 'D')
               || NVL(MAX(dlr_jul), 'D')
               || NVL(MAX(dlr_aug), 'D')
               || NVL(MAX(dlr_sep), 'D')
               || NVL(MAX(dlr_oct), 'D')
               || NVL(MAX(dlr_nov), 'D')
               || NVL(MAX(dlr_dec), 'D')
              ) payment_history_profile
FROM daybreak.accounts acc JOIN
     daybreak.delinquency_ratings dr
     ON  dlr_acc_acct_id = acc.ACC_ACCT_ID 
WHERE dlr_acc_acct_id = '20090305975688'
GROUP BY dlr_acc_acct_id;

另外,学习使用正确的JOIN语法。 简单规则: 请勿FROM子句中使用逗号。

如果您使用的是11gR2及更高版本,请使用LISTAGG

SELECT DLR_ACC_ACCT_ID,
  listagg(PAYMENT_HISTORY_PROFILE, '') within GROUP(
ORDER BY PAYMENT_HISTORY_PROFILE) PAYMENT_HISTORY_PROFILE
FROM table_name 
GROUP BY DLR_ACC_ACCT_ID;

ORDER BY子句中使用适当的列。

将您拥有的内容推入子查询中,并添加用于订购listagg()的年份,以下方法应该起作用:

SELECT dlr_acc_acct_id
      , listagg(payment_history_profile,'') WITHIN GROUP (ORDER BY dlr_year) as full_history_profile
FROM (
SELECT dlr_acc_acct_id 
      ,dlr_year
      , (   NVL (dlr_jan, 'D')
               || NVL (dlr_feb, 'D')
               || NVL (dlr_mar, 'D')
               || NVL (dlr_apr, 'D')
               || NVL (dlr_may, 'D')
               || NVL (dlr_jun, 'D')
               || NVL (dlr_jul, 'D')
               || NVL (dlr_aug, 'D')
               || NVL (dlr_sep, 'D')
               || NVL (dlr_oct, 'D')
               || NVL (dlr_nov, 'D')
               || NVL (dlr_dec, 'D')
              ) payment_history_profile
FROM daybreak.accounts acc, daybreak.delinquency_ratings dr
 WHERE  dlr_acc_acct_id = acc.ACC_ACCT_ID 
 and dlr_acc_acct_id= '20090305975688'
 and dlr_year in (2011,2010,2009) )
 GROUP BY dlr_acc_acct_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM