A | B | C | D | E
a y 6 12 21
b n 3 10 5
c n 4 12 12
c n 7 12 2
c y 1 12 22
d n 6 10 32
d n 7 10 32
Output-Tabelle basierend auf anderen Feldern in einem Feld gleichen Daten:Um 1 Datensatz aus mehreren Datensätzen zu ziehen
A | B | C | F
a y 6 21
b n 3 12
c y 1 22
d n 6 10
Ich habe eine Tabelle, die bestimmte Felder enthält. Von dieser Tabelle möchte ich doppelte Datensätze in A entfernen und die Ausgabetabelle erzeugen.
Nun wird das Feld F basierend auf dem Feld C berechnet, wenn für die Datensätze in A keine Duplikate vorhanden sind. Wenn also nur ein Datensatz von A in A vorhanden ist, dann ist die F-Spalte (Output Tabelle) zieht den Datensatz in E-Spalte. Wenn also Datensatz b in Feld C den Wert < 5 hat, zieht die F-Spalte (Ausgabetabelle) den Datensatz in Spalte D für b. Dies konnte ich anhand einer Fallaussage erreichen.
Wenn jedoch doppelte Datensätze in Spalte A vorhanden sind, möchte ich nur einen der Datensätze basierend auf der Spalte B. Es sollte nur der Datensatz abgerufen werden, der in Spalte B den Wert 'y' und in Spalte F enthält der Wert aus Spalte E. Wenn keiner der doppelten Datensätze in A den Wert 'n' in der Spalte B hat, ziehen Sie einen beliebigen Datensatz mit Spalte D als Spalte F in der Ausgabetabelle. Ich bin nicht in der Lage, diesen Teil herauszufinden.
Bitte lassen Sie mich wissen, wenn etwas nicht klar ist.
-Code Ich bin mit:
SELECT A,B,C,
CASE
WHEN (SELECT COUNT(*) FROM MyTable t2 WHERE t1.A=t2.A)>1
THEN (SELECT TOP 1 CASE WHEN b='y' THEN E ELSE D END
FROM MyTable t3
WHERE t3.A=t1.A
ORDER BY CASE WHEN b='y' THEN 0 ELSE 1 END)
ELSE {
case when cast(C as float) >= 5.00 then (Case when E = '0.00' then D else E end)
when cast(C as float)< 5.00 then D end)
}
END AS F
FROM MyTable t1
Tag Ihre Frage mit der Datenbank Sie verwenden. –