[英]SQL group results as a nested array with aggregated values
I have a query that returns me SUM amount per column for specific column 'EUR'我有一个查询返回特定列“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,
result:结果:
REMAINING_AMOUNT_EUR
68837.22
Instead of writing query for each Currency 'USD', 'CAD', I would like to aggregate it to one column as nested array and then easily parse that values on UI.我不想为每种货币“USD”、“CAD”编写查询,而是想将其聚合到一列作为嵌套数组,然后在 UI 上轻松解析该值。
Desired result in one column:一栏中的期望结果:
REMAINING_AMOUNT
[['EUR', 68837.22],['USD', 1233.12], ...]
I approached it with group by, but it still does not return the format I want我用 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
This is achievable using STUFF
function in SQLServer.这可以在 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
Also using XML PATH variant.还使用 XML PATH 变体。 Constructs the pairs then aggregates them with XML.构造对然后将它们与 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.