0

タイトルの問題をどのように説明すればよいかよくわかりませんが、ここで私の質問です。helloと という名前の 2 つの列を持つテーブルがtimeありstateます。

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

しかし、うまくいかないようです。

4

3 に答える 3

2

これは条件付き集計です。

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

distinctを持っているときは絶対に使用しないでくださいgroup by。2つは冗長です。 Distinctキーワードは SQL 言語では必要ありません。意味的には、すべての列によるグループ化の省略形です。

于 2013-02-06T00:03:54.310 に答える
2
SELECT  TIME,
        SUM(CASE WHEN State = 'VA' THEN 1 ELSE 0 END)
FROm    tableName
GROUP   BY Time
于 2013-02-06T00:04:05.273 に答える
0

経験則の 1 つは、最初にカウントを取得し、後で使用するためにそれらを temp に入れることです。下記参照:

    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]
于 2013-02-06T02:17:00.923 に答える