2009-05-04 11 views
1

Wie kann ich nach Zeit gruppieren? Ich habe versucht, diese, aber es gibt die Fehlermeldung „Ungültige Spaltenname‚Zeit‘.“:Wie kann ich nach meinen Spalten in SQL gruppieren?

select Count(Page) as VisitingCount, CONVERT(VARCHAR(5), Date, 108) as [Time] 
from scr_SecuristLog 
where Date between '2009-05-04 00:00:00' and '2009-05-06 14:58' 
and [user] in (select USERNAME from scr_CustomerAuthorities) 
group by [Time] order by [VisitingCount] asc 
+0

Ist der Fehler, dass Spalte Zeit nicht existiert? Ich denke du musst nach dem Datum gruppieren anstatt den Namen [Zeit] – u07ch

+0

zu gruppieren Aber ich brauche Zeit zum Gruppieren? – Penguen

+0

Raten Sie, ich muss lernen, langsamer zu tippen, wenn identische Antworten, die später kommen, diejenigen sein werden, die akzeptiert werden;) –

Antwort

6

[Zeit] ist eine Spalte alias. Versuchen

SELECT 
     COUNT(Page) AS VisitingCount 
    , CONVERT(VARCHAR(5),Date, 108) AS [Time] 
FROM 
    scr_SecuristLog 
WHERE 
    Date BETWEEN '2009-05-04 00:00:00' AND '2009-05-06 14:58' 
    AND 
    [user] IN (
       SELECT 
        USERNAME    
       FROM 
        scr_CustomerAuthorities 
       ) 
GROUP BY 
    CONVERT(VARCHAR(5),Date, 108) 
ORDER BY 
    [VisitingCount] ASC 
+0

Ich muss lernen, schneller zu tippen ... – Edward

+0

Sie sind richtig! Sie sind in Ordnung – Penguen

+0

Ich denke, ich muss lernen, langsamer zu tippen, wenn identische Antworten, die später kommen, diejenigen sein werden, die akzeptiert werden;) –

8

Versuchen

GROUP BY CONVERT(VARCHAR(5),Date, 108) 

immer sicher, dass Sie Gruppe von allem in Ihrer select-Klausel machen, dass nicht hat Aggregatfunktion um es herum.

+0

Sie vermissen eine schließende Klammer –

+0

Danke, ich habe nur kopiert und eingefügt aus dem ursprünglichen Beitrag. Muss es verpasst haben. – Eppz

1
select Count(Page) as VisitingCount,CONVERT(VARCHAR(5),Date, 108) as [Time] from scr_SecuristLog 
where Date between '2009-05-04 00:00:00' and '2009-05-06 14:58' 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by CONVERT(VARCHAR(5),Date, 108) order by [VisitingCount] asc 

Ich veränderte die GROUP BY die eigentliche Ausdruck für [Time], anstatt die Spalte alias enthalten (da diese nicht in der GROUP BY verwendet werden kann, nur die ORDER BY)

+0

danke viel !!! Sie sind richtig – Penguen

0

Es sieht aus wie Datum ist eine Spalte hier, aber es ist ein Schlüsselwort und nicht zitiert. Vielleicht ist das Problem (nicht getestet though):

select Count(Page) as VisitingCount,CONVERT(VARCHAR(5),[Date], 108) as [Time] from scr_SecuristLog 
where [Date] between '2009-05-04 00:00:00' and '2009-05-06 14:58' 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by [Time] order by [VisitingCount] asc 
0

Wenn Sie nicht das Datum Konvertierung wiederholen möchten (Manchmal Berechnung ist ein wenig intensiver als einfache Konvertierung), dann können Sie so etwas wie folgt verwenden:

select * 
from (select Count(page) .., ... As [Date] from ... where ...) UG 
group by UG.[Date] 

Beachten Sie, dass Sie haben die ‚UG‘ Namen interne Auswahl zu geben und dass dies höchstwahrscheinlich in den meisten Fällen weniger effizient als die Umwandlung Ausdruck in ursprünglicher Gruppierung zu wiederholen. Auch dein ganzer Ausdruck wird sich wahrscheinlich ändern ... Aber nur du weißt, dass es möglich ist.

Verwandte Themen