繁体   English   中英

SQL 将结果分组为具有聚合值的嵌套数组

[英]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.

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