2014-01-06 43 views
0

表格爲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做到這一點的呢?

回答

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柱固定在適當的每月1日(,要麼有相關一年或爲固定一年也)

我已經採取了一個簡化的步驟,SUM(Profit) - SUM(Loss)相同SUM(Profit - Loss)

+0

是有可能沒有使用樞軸和COALESCE? – SaNa3819

+1

@ user3158245 - 也許,但這就像是用螺絲釘連接兩塊木頭,然後在別人建議了一個合適的工具之後尋求幫助,然後詢問是否可以在不使用螺絲刀的情況下完成。 –

+0

SUM(利潤) - SUM(虧損)與SUM(利潤 - 虧損)相同,但如果我想將其分爲SUM(利潤)/ SUm(虧損),我應該怎麼做? – SaNa3819

相關問題