如何根据它分隔名称和添加?

时间:2014-01-06 07:41:58

标签: sql sql-server-2008

名为Product的表格和列IDPnameProfitLossMonth。总 前六个月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中执行此操作的方法是什么?

1 个答案:

答案 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的列(因为它是一个关键字),并且通常会期望它是例如dateSUM(Profit) - SUM(Loss)列固定在相应月份的第1天(并且具有相关年份或固定年份)

我采取了一个简化步骤,SUM(Profit - Loss)与{{1}}相同