我正在使用将日期列和金额列合并为字符串的查询,但是当我们按照策略编号查询它时,它会获得很多行,我的意思是将这些不同的列值合并为一个。< / p>
示例:
2014/09/01 733.00
2012/08/01 322.02
所以这些是一个策略号的不同行,现在我希望它们也在一个字符串中:
2014/09/01 733.00 2012/08/01 322.02
如果它们是两行,那么我的列的值也应该将日期和金额的所有值合并为该特定策略编号的单个字符串。
我使用的查询是:
SELECT
LEFT(CONVERT(VARCHAR, BSD.BILL_SCH_DTL_BILL_DT, 111), 10)
+ ' '+ CONVERT (VARCHAR(50),BSD.BILL_SCH_DTL_DRV_AMT ,128)Schedule_pymts, *
From POLICY_PERIOD_BILLING_SCHEDULE PB
JOIN BILLING_SCHEDULE_DETAIL BSD
ON BSD.PLCY_PRD_BILL_SCH_ID = PB.PLCY_PRD_BILL_SCH_ID
AND BSD.BILL_SCH_DTL_DRV_AMT <> 0
AND BSD.VOID_IND = 'n'
但这只会合并一个月和一个金额,但我需要将所有月份的金额合并为一个字符串(列)中的特定保单号。
答案 0 :(得分:1)
您需要使用FOR XML PATH
to concatenate your rows to columns。我觉得这样的事情会奏效:
SELECT PB.*,
RTRIM((SELECT CONVERT(VARCHAR(10), BSD.BILL_SCH_DTL_BILL_DT, 111)+ ' '
+ CONVERT(VARCHAR(50), BSD.BILL_SCH_DTL_DRV_AMT, 128) + ' '
FROM BILLING_SCHEDULE_DETAIL AS BSD
WHERE BSD.PLCY_PRD_BILL_SCH_ID = PB.PLCY_PRD_BILL_SCH_ID
AND BSD.BILL_SCH_DTL_DRV_AMT <> 0
AND BSD.VOID_IND = 'n'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')) AS Schedule_pymts
FROM POLICY_PERIOD_BILLING_SCHEDULE AS PB;
N.B。不要使用SELECT *
- 明确列出您的列,但我不知道它们是什么,所以不能在上面