2013-06-05 97 views
0

我有下面的查詢 -添加列與別名在SQL Server

select TeamProjectSK,  
    sum(case when d.System_State = 'Proposed' then 1 else 0 end) as New, 
    sum(case when d.System_State = 'Active' then 1 else 0 end) as Active, 
    sum(case when d.System_State = 'Resolved' then 1 else 0 end) as Resolved, 
    sum(case when d.System_State = 'Closed' then 1 else 0 end) as Closed  
    from 
    (
    select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev, 
    row_number() over(partition by w1.System_Id, w1.TeamProjectSK, w1.System_State order by w1.System_Rev desc) rn 
    from dbo.DimWorkItem w1  
) d 
    where rn = 1 
    and d.System_Rev = (select max(w2.System_Rev) from dbo.DimWorkItem w2 where w2.System_Id = d.System_Id) 
    group by TeamProjectSK 
    order by TeamProjectSK desc; 

查詢的結果如下 -

TeamProjectSK New Active Resolved Closed 
157   14 115  1   169 
156   0  0  0   0 
155   0  0  0   0 
154   0  0  0   0 
151   2  1  0   1 

現在我想一列「TOTAL_COUNT」,這應該是新+活動+已解決+已關閉的總和。輸出應該看起來像 -

TeamProjectSK Total_Count New Active Resolved Closed 
157  289   14 115 1 169 
156  0    0 0 0 0 
155  0    0 0 0 0 
154  0    0 0 0 0 
151  4    2 1 0 1 

我試過下面的查詢,但它沒有幫助。請看一看。

select TeamProjectSK, 
    New + Active + Resolved + Closed as Total_Count,  
    sum(case when d.System_State = 'Proposed' then 1 else 0 end) as New, 
    sum(case when d.System_State = 'Active' then 1 else 0 end) as Active, 
    sum(case when d.System_State = 'Resolved' then 1 else 0 end) as Resolved, 
    sum(case when d.System_State = 'Closed' then 1 else 0 end) as Closed  
    from 
    (
    select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev, 
    row_number() over(partition by w1.System_Id, w1.TeamProjectSK, w1.System_State order by w1.System_Rev desc) rn 
    from dbo.DimWorkItem w1 

    ) d 
    where rn = 1 
    and d.System_Rev = (select max(w2.System_Rev) from dbo.DimWorkItem w2 where w2.System_Id = d.System_Id) 
    group by TeamProjectSK 
    order by TeamProjectSK desc; 

問候。

+0

您不能引用在相同範圍內創建的別名。將主查詢放在派生表或CTE中,然後在外部執行計算。 –

+0

'CROSS APPLY'可以做到這一點! – JNK

+0

謝謝...我有了別名的概念。 – 0nir

回答

1
select TeamProjectSK, New + Active + Resolved + Closed as Total_Count, New Active, Resolved, Closed 
from 
(
select TeamProjectSK,  
    sum(case when d.System_State = 'Proposed' then 1 else 0 end) as New, 
    sum(case when d.System_State = 'Active' then 1 else 0 end) as Active, 
    sum(case when d.System_State = 'Resolved' then 1 else 0 end) as Resolved, 
    sum(case when d.System_State = 'Closed' then 1 else 0 end) as Closed  
    from 
    (
    select w1.System_Id, w1.TeamProjectSK, w1.System_State, w1.System_Rev, 
    row_number() over(partition by w1.System_Id, w1.TeamProjectSK, w1.System_State order by w1.System_Rev desc) rn 
    from dbo.DimWorkItem w1  
) d 
    where rn = 1 
    and d.System_Rev = (select max(w2.System_Rev) from dbo.DimWorkItem w2 where w2.System_Id = d.System_Id) 
    group by TeamProjectSK 
) a 
    order by TeamProjectSK desc 
+0

謝謝...我有了別名的概念。 – 0nir