10

部門のテーブルがあります。どの部署に何人いるのかを数える必要があります。これは、次の方法で簡単に実行できます。

SELECT DEPT,
       COUNT(*) as 'Total'
    FROM SR
    GROUP BY DEPT;

ここで、以下のように累積カウントも行う必要があります。

ここに画像の説明を入力

実行中の合計をカウントする SQL を見つけましたが、このようなケースはありません。この場合のアドバイスをお願いできますか?

4

2 に答える 2

3

これには一時/変数テーブルを使用でき、ここからソリューションを使用できると思います:

declare @Temp table (rn int identity(1, 1) primary key, dept varchar(128), Total int)

insert into @Temp (dept, Total)
select
    dept, count(*) as Total
from SR
group by dept

;with cte as (
    select T.dept, T.Total, T.Total as Cumulative, T.rn
    from @Temp as T
    where T.rn = 1
    union all
    select T.dept, T.Total, T.Total + C.Cumulative as Cumulative, T.rn
    from cte as C
        inner join @Temp as T on T.rn = C.rn + 1
)
select C.dept, C.Total, C.Cumulative
from cte as C
option (maxrecursion 0)

sql fiddle demo

他にもいくつかの解決策がありますが、SQL Server 2008 ではこれが最速だと思います。

于 2013-10-14T13:32:29.590 に答える