2016-01-05 64 views
0

對不起,這個問題,但我無法解決這個簡單的查詢。如何在SQL Server 2008上創建此條件分組字段?

我有這個表:

ID_Type  Item 
----------------- 
A   1 
P   2 
P   3 
A   4 
P   5 
A   6 

我需要計算基於ID_TYPE場「組」增量櫃檯裏這個領域有一個「A」的價值。這是預期的結果:

ID_Type  Item  Counter 
----------------------------- 
A   1  1 
P   2  1 
P   3  1 
A   4  2 
P   5  2 
A   6  3 

所以每次出現ID_Type ='A'的記錄時,我都需要增加計數器。任何幫助都會有所幫助。

回答

4

在SQL Server 2012+,你可以使用一個累計總和:

select t.*, 
     sum(case when id_type = 'A' then 1 else 0 end) over (order by item) as counter 
from t; 

這將是比相關子查詢的方法更有效,尤其是在更大的數據集。

+0

卓越。它工作完美。謝謝 – ericpap

3

一種方式是一個子查詢:

SELECT ID_Type, Item, (
    SELECT COUNT(*) FROM MyTable t2 
    WHERE t2.Item <= t1.Item 
    AND t2.ID_Type='A' 
) AS Counter 
FROM MyTable t1 
ORDER BY Item ASC 

這將SQL Server的任何版本。

+0

我認爲你需要在子查詢中有一個ORDER BY項來保證結果 – Mihai

+1

@Mihai。 。 。子查詢中不需要ORDER BY。 –

相關問題