2016-04-01 4 views
-1

Ich habe eine Tabelle, die wie folgt (10 Milliarden Zeilen)Verschiedene Auswahlkriterien in ungeraden und geraden Ereignisse


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

Die AID nur 0 oder 1 BID und CID sieht könnte sein könnte sei alles. Jetzt möchte ich Ereignisse zuerst mit AID = 1 und dann AID = 0, und wieder AID = 1 und dann AID = 0 auswählen. Die Idee ist, gleiche Zahlen von AID = 1 und AID = 0 Ereignis zu wählen. Wie kann ich das erreichen?

Das erwartete Ergebnis ist

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

Was wäre hier das erwartete Ergebnis sein? –

+1

Bitte geben Sie das gewünschte Ergebnis und die Abfrage an, die Sie versucht haben (falls vorhanden). Deine Erklärung ist nicht klar. – FLICKER

+0

Bitte posten Sie, was Sie bis jetzt versucht haben. Und wie es gescheitert ist. Bis dahin ist es nur eine weitere Frage "Gib mir den Codez". –

Antwort

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 

Ausgang:

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

Gute Annäherung. –

+0

@Pratikgarg Danke! Das erste kommt mir in den Sinn. – gofr1

+0

Ja .. dieser Ansatz kam mir auch beim Lesen der Frage .. aber wie es für SQL Server war, musste ich auf die Machbarkeit prüfen (ich benutze Oracle Database) .. –