2012-09-20 35 views
32

Date, Cat ve QTY sütunlarını içeren bir veri kümem var. Ne yapmak istediğim, yalnızca satır sayısı kadar benzersiz Cat değerlerini sayan benzersiz bir sütun eklemektir. Bu benim set benim sonuç gibi bakmak istediğiniz şeydir: Aşağıdaki SQL sorgusu kullanarakrow_number() Grup tarafından?

enter image description here

, ben row_number() işlevini kullanarak satır almanız mümkün değilim. Ancak, yukarıda tasvir ettiğim benzersiz sütunu alamıyorum. Grup, OVER yan tümcesine eklediğimde, çalışmaz. Bu benzersiz sayı sütununu nasıl çalıştırabileceğime dair bir fikri olan var mı?

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

cevap

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

Teşekkürler, bu doğru yönde bir adımdır. Ancak, gerçek veri setimin kedi tarafından sipariş edilmemesi. Bu örnekte nasıl çalışacağını biliyor musun? (Benim kedi sütümümde, DEF'in ABC'den önce geldiğini düşünün. Fakat DEF değerlerinin benim siparişimde ardışık olduğu doğrudur, bu yüzden DEF, DEF, ABC, ABC, DEF'yi kedi sütunundaki değerler olarak göremezsiniz) – user1582928

+2

@ user1582928 http://msdn.microsoft.com/en-us/library/ms173825.aspx " DENSE_RANK işlevinin bir bölümdeki satırlara uygulanacağı sırayı belirler". Ve her zaman SELECT'in sonunda ORDER BY ekleyebilirsin. – prashanth

+0

@ user1582928, isterseniz, siparişi değiştirmek için bir fonksiyon belirtebilirsiniz, örneğin: decode ile sipariş ('DEF', 1, 'ABC', 2,3) –

31

İşte alternatif bir çözümdür.

Cat siparişi konusunda endişelenmenize gerek yoktur. Aşağıdaki SQL'i kullanarak, Date & Cat kombinasyonunuz için benzersiz değerler elde edebileceksiniz.

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