Select case Vergleich von zwei Spalten

Ich würde gerne eine Abfrage, verwendet die höhere der beiden Werte/Spalten, wenn ein bestimmter anderer Wert für den Datensatz wahr ist.

Ich versuche, einen Bericht-account Betriebe. Leider ist die DB in der Regel speichert den Wert von Bargeld in eine Spalte namens HoldingQty, während für jede andere Art der holding (Aktien, Anleihen, Investmentfonds), die es speichert es in eine Spalte namens Qty.

Das problem ist, dass manchmal der Wert der cash gespeichert in Qty nur, und manchmal ist es in beiden Qty und HoldingQty. Natürlich manchmal ist es Daten nur im HoldingQty wie oben erwähnt.

Im Grunde möchte ich meine select-Anweisung zu sagen: "wenn die Sicherheit Bar, mit Blick sowohl auf Menge und halten Menge und geben Sie mir den Wert auch immer größer ist. Andernfalls, wenn die Sicherheit ist nicht cash geben Sie mir nur qty".

Wie würde ich schreiben, dass in T-SQL? Hier ist mein Versuch:

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, außer für die syntax.
Verwenden Sie eine zusammengesetzte case-Anweisung case when security_Type = 'cash' and h.qty<=h.holdingqty then h.holdingqty else h.qty end as quantity diese im Grunde sagt, wenn Typ ist cash und holdingqty ist > oder gleich Menge verwenden holdingqty, anderweitig zu verwenden qty. da wir wissen, dass, wenn es sich nicht um Bargeld wir verwenden immer die Menge, änderte ich die Reihenfolge ein bisschen zu vereinfachen, werden die case-Anweisung.
Seien Sie vorsichtig, wenn Sie diese Spalten null-Werte zulassen.

InformationsquelleAutor Mike O. | 2015-09-30

Schreibe einen Kommentar