2012-09-20 191 views
32

我有一個數據集,其中包含列DateCatQTY。我想要做的就是添加一個唯一的列,它在進行行計數時只計算唯一的Cat值。這就是我希望我的結果集的樣子:row_number()Group by?

enter image description here

使用下面的SQL查詢,我能夠使用row_number()函數來獲取行。

但是,我無法獲得上面描述的獨特列。當我通過OVER子句添加組時,它不起作用。有沒有人有任何想法,我如何才能使這個獨特的計數欄工作?

SELECT 
    Date,  
    ROW_NUMBER() OVER (PARTITION BY Date ORDER By Date, Cat) as ROW, 
    Cat, 
    Qty 
FROM SOURCE 

回答

13
DENSE_RANK() OVER (PARTITION BY date ORDER BY cat) 
+0

謝謝,這是朝正確方向邁出的一步。但事實是,我的實際數據集不是由cat訂購的。你知道在這個例子中它是如何工作的嗎? (想象一下,在我的貓列中,DEF出現在ABC之前,但確實DEF值在我的排序中都是連續的,所以你不會在cat列中看到DEF,DEF,ABC,ABC和DEF) – user1582928

+2

@ user1582928 As每個http://msdn.microsoft.com/en-us/library/ms173825.aspx「 確定將DENSE_RANK函數應用於分區中的行的順序」。你總是可以在SELECT的末尾添加ORDER BY。 – prashanth

+0

@ user1582928,如果你想要,你可以指定一個函數來改變順序,例如:order by decode('DEF',1,'ABC',2,3) –

31

下面是備用的解決方案。

您不必擔心Cat的排序。使用以下SQL,您將能夠獲得日期& Cat組合的唯一值。

SELECT 
    Date,  
    ROW_NUMBER() OVER (PARTITION BY Date, Cat ORDER By Date, Cat) as ROW, 
    Cat, 
    Qty 
FROM SOURCE