Ich habe eine (ziemlich komplizierte) SQL-Anweisung, wo ich Daten aus vielen verschiedenen Tabellen auswählen, und mit einer schlechten alten Datenstruktur zu bewältigen, habe ich ein paar benutzerdefinierte Spalten, deren Werte auf Werten aus anderen Spalten basieren. Ich habe zur Zeit diese mit CASE
Aussagen gelöst:Ungültiger Spaltenname Fehler in WHERE-Klausel, Spalte ausgewählt mit CASE
SELECT
...,
CASE channel
WHEN 1 THEN channel_1
WHEN 2 THEN channel_2
...
ELSE 0
END AS ChannelValue,
CASE channelu
WHEN 1 THEN channelu_1
WHEN 2 THEN channelu_2
...
ELSE '0'
END AS ChannelWithUnit,
...
FROM
...
--rest of statement continues with multiple joins and where/and clauses...
ich alle Ergebnisse, die ich erwarten, wenn die Abfrage in MS SQL Server Management Studio ausgeführt wird, und die Spaltennamen aufgeführt sind, wie ich in meinem AS
Klauseln angegeben haben. Aus irgendeinem Grund darf ich die bedingten Werte nicht in einer WHERE
-Anweisung verwenden. Wenn ich
AND ChannelValue > Limit * p.Percentage/100
am Ende der Abfrage hinzufügen, bekomme ich einen Fehler auf dieser Linie sagen
Msg 207, Ebene 16, Status 1, Zeile 152
Ungültiger Spaltenname ‚Channel‘
Warum ist das nicht erlaubt? Was soll ich stattdessen tun?