Filter basierend auf einem alias-Namen der Spalte
Ich bin mit SQL Server 2005 und ich habe eine Spalte, die ich benannt.
Die Abfrage ist so etwas wie:
SELECT id, CASE WHEN <snip extensive column definition> END AS myAlias
FROM myTable
WHERE myAlias IS NOT NULL
Jedoch, dies gibt mir die Fehlermeldung:
"Ungültige Spalte name 'myAlias'."
Gibt es eine Möglichkeit dies zu umgehen? In der Vergangenheit habe ich die definition für die Spalte entweder in der WHERE-oder der HAVING-Abschnitt, aber das waren meist einfache, DH COUNT(*) oder was auch immer. Ich kann auch die ganze definition für die Spalte in dieser ad-hoc-Abfrage, aber wenn aus irgendeinem Grund, die ich brauchte, um dies zu tun in einer Produktion, die Abfrage, die ich würde es vorziehen, um die Spaltendefinition nur einmal, damit ich nicht aktualisieren (und vergessen zu tun, ab einem bestimmten Zeitpunkt)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht Referenz-Aliase in der where Klausel so... entweder man verdoppeln müssen, der FALL ist in der WO, oder Sie können eine Unterabfrage verwenden, wie diese:
Allgemeine Tabellenausdrücke verwenden, ist auch eine option:
Setzen die gleichen
CASE
- Anweisung in derWHERE
Klausel:BEARBEITEN
Eine weitere option ist das nest der Abfrage:
(Edit: entfernt
HAVING
option, dies war falsch (danke @OMG Ponys))setzen Sie den Fall in der wo. SQL Server wird clever genug sein, nur bewerten Sie es einmal, so dass Sie nicht wirklich das duplizieren von code:
könnten Sie wickeln Sie es in eine abgeleitete Tabelle:
Jedoch versuche ich zu vermeiden, dass die abgeleiteten Tabellen ohne eine restriktive WO. Sie können es versuchen, um zu sehen, ob es die Leistung beeinträchtigt oder nicht.
Ich landete eine temp-Tabelle zu tun. Hier einige pseudo-code, um Ihnen eine Idee geben. Dieser arbeitete mit einem komplexen join, ich bin nur mit einem einfachen Fall hier.