2 Stimmen

SQL-Alias ergibt "ungültigen Spaltennamen" für Group By

Ich habe ein Problem bei dem Versuch, einen Alias für eine neue Spalte zu erstellen und ihn in der GROUP BY-Klausel zu verwenden:

SELECT TOP 100 Percent
count(id) AS [items_by_day],    
(SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, [date]))) AS [date_part]
FROM [MyDB].[dbo].[MyTable]
GROUP BY DAY([date]), MONTH([date]), YEAR([date]), date_part

Ich erhalte den folgenden Fehler:

Msg 207, Level 16, State 1, Line 5
Invalid column name 'date_part'.

Wie lässt sich das Problem lösen?

4voto

surfmuggle Punkte 4838

Wie wäre es mit einer Unterabfrage?

Siehe meine Demo bei sqlfiddle

Select  Count(*) as nrOfRecords, sq.[items_by_day], sq.[date_part] 
From (
    SELECT TOP 100 Percent count(id) AS [items_by_day]
      ,(Select Dateadd(dd, 0, Datediff(dd, 0, [date]))) AS [date_part]
    From  [MyTable] 
    Group By id, date
) as sq
Group by sq.[items_by_day], sq.[date_part]

Der Teil (SELECT DateAdd(... DateDiff(...)) scheint das einfache Datum zu liefern. Können Sie mir erklären, was ich übersehe?

1voto

ARA Punkte 1220

Sie können einen Spaltenalias nicht in einer GROUP BY verwenden, Aliasnamen dienen der Anzeige, es sei denn, der Alias ist in einer Unterabfrage enthalten, in diesem Fall wird er zum Spaltennamen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X