1

常に 3 行のみを返す select ステートメントがあります。1 つの列には静的な値 RED AMBER と GREEN があります。

http://sqlfiddle.com/#!6/5e107/2

フィドルリンクには、サンプルコードがあります。

 select color,SUM(clrcount) from 
 tmp group by color 

実行時に 3 行を返します。しかし、AMBER とマークされたアイテムを削除してからグループ化すると、2 行だけが返されます。常に返されるには3行が必要です。AMBER 行はカウントを 0 にすることができます

4

5 に答える 5

4

再設計はより良いアプローチですが、今それを行うことができず、これらの 3 つの色について確信がある場合は、次のようなことを試してください。

フィドルのデモ

select t.color,coalesce(sum(clrcount),0) colorCount
from tmp  right join 
         (values('RED'),('AMBER'),('GREEN')) As t(color)
     on tmp.color = t.color
group by t.color
于 2013-09-24T14:05:54.107 に答える
1
select color,SUM(clrcount) from 
 (SELECT * from tmp 
 UNION ALL 
 SELECT 'RED',0
 UNION ALL
 SELECT 'AMBER',0
 UNION ALL
 SELECT 'GREEN',0)temp
 group by color
于 2013-09-24T14:12:17.200 に答える
1

琥珀色の行を削除するのではなく、それらの行に対して clrcount = 0 を設定する必要があります。これは現在のクエリで機能します。

ただし、それらを削除する必要がある場合は、Joel Coehoorn による回答が最適です。

于 2013-09-24T14:05:02.530 に答える
1

質問にあるスキーマを使用するには、次のことができる必要があります。

SELECT color, MAX(clrcount) AS clrcount
FROM (
    SELECT color, COUNT(clrcount) AS clrcount
    FROM tmp T
    GROUP BY color

    UNION ALL SELECT 'RED', 0
    UNION ALL SELECT 'AMBER', 0
    UNION ALL SELECT 'GREEN', 0
) A 
GROUP BY color

aUNIONを使用して、必要な行が結果に含まれるようにします。

于 2013-09-24T14:06:28.750 に答える
0

可能な色を定義する別のテーブルが必要です。次に、次のようにそこから参加します。

select c.color, sum(clrcount)
from colors c
left join tmp t on t.color = c.color
group by c.color
于 2013-09-24T13:58:41.850 に答える