Ich muss einen Ad-hoc-Bericht über die Anzahl der Transaktionen mit verschiedenen Kreditkarten-Typen erstellen. Für die Zwecke des Berichts ist es gut anzunehmen, dass alle Kreditkarten, die mit einer 4 beginnen, VISA-Karten sind und dass diejenigen, die mit einer 5 beginnen, MasterCard sind.Transact SQL CASE über eine variable Länge input_expression
Diese Abfrage funktioniert gut für die oben genannten Unterschiede:
select card_type =
case substring(pan,1,1)
when '4' then 'VISA'
when '5' then 'MasterCard'
else 'unknown'
end,count(*),
sum(amount)
from transactions
group by card_type
aber in unserer Situation (nicht sicher, wie das weltweit funktioniert), um alle Karten, die mit einem 3 beginnen mit Ausnahme des Diner Club-Karten in Betracht gezogen werden, dass Beginnen Sie mit einer 37, die AMEX-Karten sind.
Erweiterung der obigen Abfrage wie folgt wie ein komplettes Hack scheint
select card_type =
case substring(pan,1,2)
when '30' then 'Diners'
...
when '37' then 'AMEX'
...
when '39' then 'Diners'
when '40' then 'VISA'
...
when '49' then 'VISA'
when '50' then 'MasterCard'
...
when '59' then 'MasterCard'
else 'unknown'
end,count(*),
sum(amount)
from transactions
group by card_type
Gibt es eine elegante Art und Weise der Gruppierung durch die erste Ziffer in allen Fällen, außer denen die ersten beiden Ziffern der Sonderfall überein?
Ich habe auch keine Ahnung, wie Titel diese Frage, wenn jemand aushelfen will ...
EDIT: Ich hatte die Werte für Mastercard und VISA gemischt, so dass nur zu sein richtig :)
Die Antwort lässt fast meine Frage albern aussehen, kann nicht glauben, dass ich diesen nie sah. Vielen Dank. –