[英]SQL group results as a nested array with aggregated values
我有一個查詢返回特定列“EUR”的每列 SUM 金額
select sum(DC_SUB.REM_AMOUNT)
from DEBT.DEBT_CLAIM DC_SUB
where DC_SUB.DEBT_ID = D.DEBT_ID
and DC_SUB.END_DATE is null
and DC_SUB.CUR_CODE = 'EUR'
and DC_SUB.STATUS = 'ACTIVE') as REM_AMOUNT_EUR,
結果:
REMAINING_AMOUNT_EUR
68837.22
我不想為每種貨幣“USD”、“CAD”編寫查詢,而是想將其聚合到一列作為嵌套數組,然后在 UI 上輕松解析該值。
一欄中的期望結果:
REMAINING_AMOUNT
[['EUR', 68837.22],['USD', 1233.12], ...]
我用 group by 接近它,但它仍然沒有返回我想要的格式
select DC_SUB.CUR_CODE, sum(DC_SUB.REM_AMOUNT)
from DEBT.DEBT_CLAIM DC_SUB
where DC_SUB.DEBT_ID = D.DEBT_ID
and DC_SUB.END_DATE is null
and DC_SUB.STATUS = 'ACTIVE'
group by DC_SUB.CUR_CODE as GROUPPED_CUR
這可以在 SQLServer 中使用STUFF
function 來實現。
select top 1
CUR_CODE =
stuff((SELECT ',['''+ DC_SUB.CUR_CODE + ''','+ convert(varchar, sum(DC_SUB.REM_AMOUNT)) +']'
from DEBT.DEBT_CLAIM DC_SUB
where DC_SUB.DEBT_ID = D.DEBT_ID
and DC_SUB.END_DATE is null
and DC_SUB.STATUS = 'ACTIVE'
group by DC_SUB.CUR_CODE
for xml path('')
), 1, 1,'')
from DEBT.DEBT_CLAIM
還使用 XML PATH 變體。 構造對然后將它們與 XML 聚合。
SELECT SUBSTRING((
SELECT ',[' + DC_SUB.CUR_CODE + ',' + CAST(SUM(DC_SUB.REM_AMOUNT) AS VARCHAR(20)) + ']'
FROM DEBT.DEBT_CLAIM DC_SUB
WHERE DC_SUB.DEBT_ID = D.DEBT_ID
AND DC_SUB.END_DATE is null
AND DC_SUB.STATUS = 'ACTIVE'
GROUP BY CUR_CODE
FOR XML PATH(''), TYPE
).value('text()[1]', 'nvarchar(max)'),
2,1000
) [CUR_CODEs];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.