2011-03-07 27 views
14

tarafından grubunu kullanarak alınan sonuç her grubun dışına ilk kaydını almak için:nasıl varsayalım komutu

ID GroupID Qty 
1   1 100 
4   2 98 
6   3 175 
9   4 215 

herhangi biri bana nasıl yardımcı olabilir

ID GroupID Qty 
1   1 100 
2   1 200 
3   1 300 
4   2 98 
5   2 198 
6   3 175 
7   3 275 
8   3 375 
9   4 215 

Çıktı olmalıdır SQL Server T-SQL sorgusu ile yapmak için?

+0

daha net olabilir:

SELECT a.* FROM tmpTable a INNER JOIN (SELECT ROW_NUMBER() over(PARTITION BY GroupID ORDER BY ID, GroupID) AS SEQ, tmpTable.* FROM tmpTable) b ON a.ID = b.ID AND a.GroupID = b.GroupID WHERE b.SEQ = 1 

ROW_NUMBER nasıl kullanılacağı hakkında daha fazla bilgi? Neyin girişleri? Çıktı neden bu şekilde olmalı? Bir tabloya giriyor musunuz? Belki de açık olmayan formatlamadır. – Ramy

+0

"İlk" i tanımlayın. İlk olarak ne emredildi? "Qty" her zaman örnek verilerinize göre bir grup içinde "id" olarak mı yükseliyor? –

+0

Yüksek kaliteli soru! Kullandığınız SQL Server sürümünden bahsetmiş olabilirsiniz. –

cevap

29
declare @T table (ID int, GroupID int, Qty int) 
insert into @T values 
(1, 1, 100), 
(2, 1, 200), 
(3, 1, 300), 
(4, 2, 98), 
(5, 2, 198), 
(6, 3, 175), 
(7, 3, 275), 
(8, 3, 375), 
(9, 4, 215) 

;with cte as 
(
    select 
    ID, 
    GroupID, 
    Qty, 
    rank() over(partition by GroupID order by ID) as rn 
    from @T 
) 
select ID, GroupID, Qty 
from cte 
where rn = 1 
+0

Mükemmel! Ancak, durumumdaki rütbeyi() ROW_NUMBER() olarak değiştirmek zorunda kaldım. Teşekkürler btw. –

+0

Harika cevap. [CTE] (http://technet.microsoft.com/en-us/library/ms190766 (v = sql.105) .aspx) MSSQL 2005 ve üstü çalışır. MSSQL 2000'de değil. –

5

DÜZENLEME

SELECT 
    MIN(ID) , 
    GroupID, 
    (SELECT TOP 1 Qty FROM @TABLE T2 WHERE T2.ID = MIN(T1.ID)) 
FROM 
    @TABLE T1 
GROUP BY 
    GroupID 

Girdi Bence iyi ve daha esnek bir yol ROW_NUMBER kullanmak olacaktır

ID GroupID Qty 
    1 1 100 
    2 1 200 
    3 1 300 
    4 2 98 
    5 2 198 
    6 3 175 
    7 3 275 
    8 3 375 
    9 4 215 

Çıktı

1 1 100 
4 2 98 
6 3 175 
9 4 215