![](/img/trans.png)
[英]How to combine each three rows into single column in SQL Server 2008?
[英]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.