2

私は次の行を言いました

Country Population
IE  30
IE  20
UK  15
DE  20
DE  10
UK  20
BE  5

したがって、基本的には、IE と DE の値のみをまとめたいと考えています...残りは値が必要です

したがって、これはそれらすべてを合計します..

Select Country, Sum(Population) From CountryPopulation group by Country

where句を追加して、IEとDEを除く他のすべての国を除外できます...しかし、これらも結果セットに含めたいのですが、合計しないでください。

上記の表を合計すると、次のようになります。

Country Population
IE  50         -- Summed
UK  15         -- Orginal Value
DE  30         -- Summed
UK  20         -- Orginal Value
BE  5          -- Orginal Value

問題は、クエリをグループごとに集計する必要があるため、合計を取得できない、またはケースが機能しないことです。私ができる唯一の他の方法は、

すべての IE と DE を合計し、それを残りのデータと結合します。
または
、CTE を使用するかもしれません

これを行うための素敵な滑らかな方法はありますか....

4

3 に答える 3

2
declare @t table (Country char(2), Population int)
insert into @t (Country, Population) values
('IE',30),
('IE',20),
('UK',15),
('DE',20),
('DE',10),
('UK',20),
('BE',5 )

; With Ordered as (
    select Country,Population,CASE
                                 WHEN Country in ('IE','DE') THEN 1
                                 ELSE ROW_NUMBER() OVER (ORDER BY Country)
                               END as rn
    from @t
)
select Country,rn,SUM(Population)
from Ordered
group by Country,rn

プロデュース:

Country rn                   
------- -------------------- -----------
BE      1                    5
DE      1                    30
IE      1                    50
UK      6                    15
UK      7                    20

トリックは、すべてが を取得するIEと行を除いて、各行に一意の値を導入することです。実際、すべてのソース行がすでにそのような一意の値を持っている場合、CTE を単純化できます (または回避できますが、式を と に配置する必要があります) 。DE1CASEGROUP BYSELECT

于 2013-10-29T15:24:28.843 に答える