2009-05-04 45 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”名内部选择,并认为这将是最有可能的,而且在大多数情况下比原分组重复转换表达效率较低。 你的整个表情很可能会改变......但是,只是你知道这是可能的。

相关问题