2009-05-04 47 views
1

如何按時間分組?我想這一點,但它給錯誤「無效列名‘時間’。」:如何在SQL中對我的列進行分組?

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

列時間不存在的錯誤?我認爲你需要按日期轉換而不是名稱[時間] – u07ch 2009-05-04 14:10:09

+0

但我需要時間組? – Penguen 2009-05-04 14:12:01

+0

猜猜我需要學會打字速度較慢,如果後面相同的答案會被接受; – 2009-05-04 14:33:41

回答

6

[時間]是一個列別名。嘗試

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 
8

嘗試

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

始終在您的SELECT子句確保你按的一切,沒有一個它的聚合函數。

+0

您錯過了一個右大括號 – 2009-05-04 14:12:42

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 

我修改GROUP BY以包括用於[Time]實際表達,而不是列的別名(因爲這不能在GROUP BY可以使用,只有ORDER BY

0

看起來像日期是這裏的一列,但它是一個關鍵字,沒有引用。也許這是個問題(不是雖然測試):

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

如果你不想重複日期轉換(有時計算是有點比簡單的轉換更密集),那麼你可以使用這樣的事情:

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

請注意,您帶來的「UG」名內部選擇,並認爲這將是最有可能的,而且在大多數情況下比原分組重複轉換表達效率較低。 你的整個表情很可能會改變......但是,只是你知道這是可能的。

相關問題