名为Product
的表格和列ID
,Pname
,Profit
,Loss
,Month
。总
前六个月Total=Sum(Profit)-Sum(Loss)
,在一个名为Col1
的列中,最后六个月Total=Sum(Profit)-Sum(Loss)
位于一个名为Col2
的列中,由Pname
分隔。
示例输入:
ID PName Month Profit Loss
-- ----- ----- ------ ----
1 A JAN 5 2
2 B FEB 4 2
3 A MAR 10 3
4 B Nov 5 2
预期产出
PName Col1 col2
----- ---- ----
A 10 0
B 2 3
在SQL Server中执行此操作的方法是什么?
答案 0 :(得分:2)
这似乎可以完成这项工作:
declare @t table (ID int not null,PName char(1) not null,Month char(3) not null,
Profit int not null,Loss int not null)
insert into @t(ID,PName,Month,Profit,Loss) values
(1,'A','JAN',5,2),
(2,'B','FEB',4,2),
(3,'A','MAR',10,3),
(4,'B','Nov',5,2)
;With Halves as (
select PName,
CASE WHEN Month in ('Jan','Feb','Mar','Apr','May','Jun') THEN 1
ELSE 2 END as Half,
Profit - Loss as Net
from @t
)
select PName,
COALESCE([1],0) as Col1,
COALESCE([2],0) as Col2
from Halves pivot (SUM(Net) for Half in ([1],[2])) p
我通常建议不要使用名为Month
的列(因为它是一个关键字),并且通常会期望它是例如date
。 SUM(Profit) - SUM(Loss)
列固定在相应月份的第1天(并且具有相关年份或固定年份)
我采取了一个简化步骤,SUM(Profit - Loss)
与{{1}}相同