即使计数为0,也选择Distinct Attribute和Print out of Count

时间:2013-02-06 00:02:18

标签: sql select

我不太清楚如何描述标题问题,但这是我的问题。 我有一个名为hello的表,其中有两列名为timestate

Time | State

这是我拥有的数据的一个例子

1 DC
1 VA
1 VA
2 DC
2 MD
3 MD
3 MD
3 VA
3 DC

我想得到所有可能的时间和“VA”的数量(如果“VA”当时没有出现,则为0) 输出看起来像这样

Time Number
1 2
2 0
3 1

我试着做

SELECT DISTINCT time,
    COUNT(state) as Number
        FROM hello
        WHERE state = 'VA'
        GROUP BY time

但它似乎不起作用。

3 个答案:

答案 0 :(得分:2)

这是一个条件聚合:

select time, sum(case when state = 'VA' then 1 else 0 end) as NumVA
from hello
group by time

我想补充一点,当你拥有distinct时,千万不要使用group by。这两个是多余的。在SQL语言中甚至不需要Distinct作为关键字;从语义上讲,它只是所有列分组的简写。

答案 1 :(得分:2)

SELECT  TIME,
        SUM(CASE WHEN State = 'VA' THEN 1 ELSE 0 END)
FROm    tableName
GROUP   BY Time

答案 2 :(得分:0)

一条经验法则是先计算你的计数,然后将它们放入临时表中供以后使用。 见下文:

    Create table temp(Num int, [state] varchar(2))
    Insert into temp(Num,[state])
    Select 1,'DC'
        UNION ALL
    Select 1,'VA'
        UNION ALL
    Select 1,'VA'
        UNION ALL
    Select 2,'DC'
        UNION ALL
    Select 2,'MD'
        UNION ALL
    Select 3,'MD'
        UNION All
    Select 3,'MD'
        UNION ALL
    Select 3,'VA'
        UNION ALL
    Select 3,'DC'


     Select t.Num [Time],t.[State]
     , CASE WHEN t.[state] = 'VA' THEN Count(t.[State]) ELSE 0 END [Number]
     INTO #temp2
    From temp t
    Group by t.Num, t.[state]
    --drop table #temp2
    Select
    t2.[time]
    ,SUM(t2.[Number])
    From #temp2 t2
    group by t2.[time]
相关问题