[英]SQL aggregate rows in one row with different name
我有一个CTE,它返回由于几次连接而产生的以下信息:
city Value1 Value2
Aveiro 83 1624
Beja 6 83
Braga 70 1751
Bragança 8 165
Castelo Branco 7 206
Coimbra 32 573
Évora 14 173
Faro 181 3284
Guarda 2 106
Ilha da Graciosa 39 92
Ilha da Madeira 520 3339
Ilha das Flores 53 154
Ilha de Porto Santo 46 107
Ilha de Santa Maria 114 140
Ilha de São Jorge 31 116
Ilha de São Miguel 306 2582
Ilha do Corvo 7 12
Ilha do Faial 90 217
Ilha do Pico 123 167
Ilha Terceira 205 493
Leiria 82 1167
Lisboa 301 8833
Portalegre 11 201
Porto 333 5966
Santarém 39 973
Setúbal 90 2229
Viana do Castelo 24 435
Vila Real 30 473
Viseu 40 640
基本上,它们按城市和岛屿返回一些值,而我想使用以下规则将某些岛屿的值合并为一行:
马德拉岛=圣港波尔图+马德拉岛
亚速尔群岛=
Ilha da Graciosa
Ilha das Flores
Ilha de Santa Maria
Ilha de São Jorge
Ilha de São Miguel
Ilha do Corvo
Ilha do Faial
Ilha do Pico
Ilha Terceira
输出应为:
city Value1 Value2
Aveiro 83 1624
Beja 6 83
Braga 70 1751
Bragança 8 165
Castelo Branco 7 206
Coimbra 32 573
Évora 14 173
Faro 181 3284
Guarda 2 106
Madeira 566 3446
Açores 968 3973
Leiria 82 1167
Lisboa 301 8833
Portalegre 11 201
Porto 333 5966
Santarém 39 973
Setúbal 90 2229
Viana do Castelo 24 435
Vila Real 30 473
Viseu 40 640
我使用FOR XML PATH基于相同的帖子尝试了几种想法,但无法重现预期的结果。
我没有任何可以在GROUP中使用的ID,因为Island具有自己的ID,有人可以帮我吗?
谢谢
您可以使用一个case
:
select (case when city in ('Ilha de Porto Santo', 'Ilha da Madeira')
then 'Madeira'
when city in ('Ilha da Graciosa', 'Ilha das Flores', 'Ilha de Santa Maria',
'Ilha de São Jorge', 'Ilha de São Miguel', 'Ilha do Corvo',
'Ilha do Faial', 'Ilha do Pico', 'Ilha Terceira')
then 'Açores'
else city
end) as city
sum(Value1) as value1, sum(Value2) as value2
from cte
group by (case when city in ('Ilha de Porto Santo', 'Ilha da Madeira')
then 'Madeira'
when city in ('Ilha da Graciosa', 'Ilha das Flores', 'Ilha de Santa Maria',
'Ilha de São Jorge', 'Ilha de São Miguel', 'Ilha do Corvo',
'Ilha do Faial', 'Ilha do Pico', 'Ilha Terceira')
then 'Açores'
else city
end);
嗯,考虑到这一点,您可能应该定义一个包含“详细城市”和“报告城市”的参考表。 这将使将来维护代码更加容易-有关合并内容的规则将在表中(易于更改)而不是代码中(难于更改)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.