Ich benutze SQL Server. Ich habe Tabelle mit Stundenwerten für verschiedene Aufgaben und Tag 1 bis 7, wie so (Tabelle TaskHours):SQL Server - kann keine Zeilen mit Summe> 0 auswählen
| TaskID | Hours1 | Hours2 | Hours3 | Hours4 | Hours5 | Hours6 | Hours7 |
| 1 | NULL | 10 | NULL | NULL | NULL | NULL | NULL |
| 2 | NULL | NULL | 0 | NULL | NULL | NULL | NULL |
| 3 | 0 | NULL | 0 | NULL | 0 | 0 | NULL |
| 4 | 3 | 3 | 0 | 3 | NULL | NULL | 3 |
| 5 | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
Ich brauche berechnen nur die Summe der Stunden für jede TaskId und wählen Sie diejenigen von ihnen, nur das hat die Summe der Stunden> 0 Aber wenn ich versuche zu schreiben:
SELECT TaskID, Hours1, Hours2, Hours3, Hours4, Hours5, Hours6, Hours7,
SUM(ISNULL(Hours1, 0) + ISNULL(Hours2, 0) + ISNULL(Hours3, 0) + ISNULL(Hours4, 0)
+ ISNULL(Hours5, 0) + ISNULL(Hours6, 0) + ISNULL(Hours7, 0)) AS TotalHours
FROM TaskHours
WHERE TotalHours > 0
dann bekomme ich den Fehler:
Invalid column name 'TotalHours'.
Was ich tue, falsch machen und wie man repariere es?
Dies ist eine Konsequenz der logischen Verarbeitungsreihenfolge von SQL Server (https://destinationdata.wordpress.com/2016/01/10/the-logical-processing-order-3/). TL/DR: Aliase aus der select-Klausel sind nur für die Bestellung von verfügbar. Cross-Apply- und Unterabfragen können das umgehen. –