2016-04-28 14 views
0

Ich versuche, Zeilen in einer SQL-Tabelle basierend auf mehreren Bedingungen innerhalb derselben eindeutigen ID auszuwählen.SQL Server: Auswählen von Zeilen basierend auf mehreren Bedingungen innerhalb derselben eindeutigen ID

Ich habe die folgende Tabelle:

ID               Der Status
                AS
                Rec
                AS

Die Regeln sind wie folgt:

  • Wenn ein [ID] sowohl 'Rec' und 'AS' , wählen Sie nur die Zeile mit 'Rec'. Mit anderen Worten, "Rec" hat Vorrang vor "AS".

  • Wenn die [ID] nicht 'Rec' hat, wählen Sie die Zeile mit 'AS' aus.

Ich möchte die Abfrage Ausgabe nur die Zeilen ID=1,Status=AS und ID=2,Status=Rec.

Was ist die Abfrage zu wählen nur diese zwei Zeilen?

Antwort

1

Können Sie eine Hilfssäule oder ein Feld erstellen, das als Auftrag für Ihre Werte dient?

Rec = 3 
AS = 2 
.... 

Dann finden Sie in der Beschreibung und in Verbindung stehende Artikel hier: https://stackoverflow.com/a/2129703/5819421

Der Artikel spricht von „Auswahl der eine maximale Zeilen aus jeder Gruppe“, die so klingt, wie dies für Sie funktionieren würde.

+0

Ich kann keine zusätzlichen Spalten erstellen. Es wäre einfach, wenn ich einfach einen 'WHERE [newCol] = 'was auch immer'-Zustand hinzufügen könnte, aber ich habe keine Kontrolle darüber. – BansheeAce

0

Psuedo Code:

SELECT DISTINCT Id, Status 
FROM MyTable 
WHERE Status = 'Rec' 
OR (
Status = 'AS' 
AND NOT EXISTS(
    SELECT * FROM MyTable WHERE Status='Rec', correlated to outer query on Id 
) 
) 

In Englisch, eine bestimmte Menge von Zeilen, wo Status "Rec" oder den Status "AS" und es gibt keinen "Rec" für die gleiche ID.

1
; WITH CTE AS (
    SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY status DESC) rn, ID, Status 
    FROM (
     SELECT DISTINCT id, status 
     FROM MyTable 
    )--in case you have several Rec's and AS's 
) 
SELECT id, status 
FROM CTE 
WHERE rn = 1 
+0

Natürlich kann es notwendig sein, die abgeleitete Tabelle im CTE weiter zu filtern, wenn es auch andere Statuswerte gibt, die Sie nicht berücksichtigen möchten. – HLGEM

Verwandte Themen