Weiß jemand, ob es eine Möglichkeit gibt, die in this question verwendete Methode der Verwendung des Alias einer Unterabfrage zu replizieren, um Berechnungen für ein anderes Feld in t-SQL durchzuführen?Verwendung eines Alias in einer Berechnung für ein anderes Feld
ich die gleiche Syntax für die folgende Abfrage in MS SQL Express versucht, mit und bekam den Fehler unten:
DECLARE @PracticeID INT
DECLARE @Date1 date
DECLARE @Date2 date
SET @PracticeID = 11015
SET @Date1 = '2017-06-01'
SET @Date2 = '2017-09-01'
SELECT prtc.PracticeName ,COUNT(CASE WHEN udi.DevicePlatform = 'iOS' THEN 1 ELSE NULL END) iOSLogins,
COUNT(CASE WHEN udi.DevicePlatform = 'Android' THEN 1 ELSE NULL END) AndroidLogins,
(SELECT COUNT(*)
FROM UserEvent UE
WHERE UE.EventTypeID = 1 AND
UE.PracticeID = au.PracticeID AND
(UE.EventDate BETWEEN @Date1 and @Date2)
) TotalNumberLogins,
(SELECT TotalNumberofLogins) - ((SELECT iOSLogins) + (SELECT AndroidLogins)) DesktopLogins
FROM UserDeviceInfo UDI JOIN
AppUser AU ON udi.UserID = au.UserID JOIN
Practice PRTC ON au.PracticeID = prtc.PracticeID
WHERE au.PracticeID = @PracticeID AND
(udi.Created BETWEEN @Date1 AND @Date2)
GROUP BY prtc.PracticeName, au.PracticeID
Msg 207, Ebene 16, Status 1, Zeile 17 Ungültiger Spaltenname ‚TotalNumberofLogins ". Meldung 207, Ebene 16, Status 1, Zeile 17 ungültig Spaltenname 'iOSLogins'. Nachricht 207, Ebene 16, Status 1, Zeile 17 ungültig Spaltenname "AndroidLogins".
Nicht, dass es einen Unterschied machen würde, aber ich habe versucht, die Alias in Anführungszeichen und Klammern ohne Erfolg zu setzen.
Ich schaffte es, das gewünschte Ergebnis von einer anderen Methode zu erhalten, indem ich die Berechnungen mit den gleichen Werten wie Variablen statt Alias und dann Einfügen in eine Tabelle durchführte.
Diese Abfrage ist jedoch ausführlich, und ich würde gerne wissen, ob es eine Möglichkeit gibt, das Verhalten in der referenzierten Frage für die zukünftige Verwendung zu replizieren.
Vielen Dank für Ihre Hilfe.
Ihr zweiter Vorschlag war genau die Art von Antwort, die ich war auf der Suche nach. Danke Aaron, du warst eine enorme Hilfe. Als eine Nebenbemerkung, warum schlägt die Abfrage fehl, wenn ich den Tabellenalias "a" entferne? –
@ W.Harr Glücklich zu helfen. Ich fügte meiner Antwort eine Erklärung des Alias hinzu, es war zu lang, um als Kommentar zu schreiben. Die kurze Antwort lautet, dass Sie eine Pseudo-Tabelle aus Ihrer Ergebnismenge erstellen, und SQL Server erfordert, dass Sie Ihre Tabelle benennen, damit Sie sie referenzieren können. –
danke für die Erklärung so gründlich –