繁体   English   中英

SQL汇总一行中具有不同名称的行

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

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