Ich möchte eine Abfrage haben, die den größeren von zwei Werten/Spalten verwendet, wenn ein bestimmter anderer Wert für den Datensatz wahr ist.Wählen Sie den Fall aus, der zwei Spalten vergleicht
Ich versuche, einen Bericht Konto Bestände zu bekommen. Leider speichert die DB in der Regel den Wert von Cash in einer Spalte HoldingQty
, während für jede andere Art von Holding (Aktien, Anleihen, Investmentfonds) es in einer Spalte namens Qty
speichert.
Das Problem ist, dass manchmal der Wert des Geldes nur in Qty
gespeichert wird, und manchmal in Qty
und HoldingQty
. Offensichtlich ist es manchmal nur in HoldingQty
wie oben erwähnt gespeichert.
Grundsätzlich möchte ich meine Select-Anweisung zu sagen "Wenn die Sicherheit Bargeld ist, schauen Sie sowohl Menge als auch Halten Menge und geben Sie mir den Wert von was größer ist. Andernfalls, wenn die Sicherheit nicht Bargeld ist, geben Sie mir einfach Menge" .
Wie würde ich das in T-SQL schreiben? Hier ist meine Mühe ist:
SELECT
h.account_name, h.security_name, h.security_type, h.price,
(CASE:
WHEN security_type = 'cash'
THEN (WHEN h.qty > h.holdingqty
THEN h.qty
ELSE h.holdingqty)
ELSE qty) as quantity,
h.total_value
FROM
holdings h
WHERE
...........
Sie sind fast da mit Ausnahme der Syntax. –
Verwenden Sie eine zusammengesetzte case-Anweisung 'case wenn security_Type = 'cash' und h.qty <= h.holdingqty dann h.holdingqty else h.qty end als menge 'das sagt im Grunde, wenn type bar ist und holdqty> oder gleich ist Menge verwenden Sie holdqty, sonst verwenden Sie Menge. Da wir wissen, wann es kein Bargeld ist, verwenden wir immer die Menge, ich änderte die Reihenfolge ein wenig, um die Case-Anweisung zu vereinfachen. – xQbert
Seien Sie vorsichtig, wenn diese Spalten nullfähig sind. – shawnt00