2016-04-01 14 views
-1

Ben YARDIM yalnızca 0 veya 1 BID ve CID olabilir olabilir şuna benzer bir tablo (10 milyar satır)Farklı seçme garip kriterleri ve hatta olaylar


AID BID CID  
    1 2 1 
    1 6 9 
    0 1 4 
    1 3 2 
    1 100 2 
    0 4 2 
    0 0 1 

var bir şey ol. Şimdi ilk önce AID = 1 ve sonra AID = 0 ve tekrar AID = 1 ve sonra AID = 0 olan olayları seçmek istiyorum. Fikir, AID = 1 ve AID = 0 olayının eşit sayılarını seçmektir. Bunu nasıl başarabilirim?

beklenen sonucudur

AID BID CID  
    1  2  1  
    0  1  4  
    1  6  9  
    0  4  2  
    1  3  2  
    0  0  1  
+1

Burada beklenen sonuç olurdu? –

+1

Lütfen istediğiniz sonucu ve denediğiniz sorgunuzu belirtin (varsa). Sen açıklama açık değil. – FLICKER

+0

Lütfen şimdiye kadar denediğiniz şeyi gönderin. Ve nasıl başarısız oldu. O zamana kadar, başka bir "bana kodunu ver" sorusu. –

cevap

3
;WITH cte AS (
select * 
FROM (VALUES 
(1, 2, 1), 
(1, 6, 9), 
(0, 1, 4), 
(1, 3, 2), 
(1, 100, 2), 
(0, 4, 2), 
(0, 0, 1) 
) as t(AID, BID, CID) 
), 
withrow AS (
SELECT ROW_NUMBER() OVER (PARTITION BY AID ORDER BY AID) as RN, * 
FROM cte) 

SELECT AID,BID,CID 
FROM withrow 
ORDER BY RN asc , aid desc 

Çıktı:

AID   BID   CID 
----------- ----------- ----------- 
1   100   2 
0   4   2 
1   3   2 
0   1   4 
1   6   9 
0   0   1 
1   2   1 

(7 row(s) affected) 
+0

İyi yaklaşım .. –

+0

@pratikgarg Teşekkürler! İlk aklımda olsun. – gofr1

+0

Evet .. bu yaklaşım soruyu okurken de bana ulaştı .. ama sqlserver için olduğu gibi fizibilite (Oracle veritabanı kullanıyorum) kontrol etmek gerekiyordu .. –