5

以下のステートメントを取り、それを 1 つのクエリに融合したいと思います。

SELECT COUNT(*) AS count1 WHERE Month='11' AND Flag = 1
SELECT COUNT(*) AS count2 WHERE Month='11' AND Flag = 2
SELECT COUNT(*) AS count1 WHERE Month='12' AND Flag = 1
    SELECT COUNT(*) AS count2 WHERE Month='12' AND Flag = 2

これを、count1 列と count2 列、11 か月と 12 か月の行を持つ 1 つのクエリとして表示したいと考えています。

これには構文がありますか?

4

3 に答える 3

9

SUMとを組み合わせてCASE、一度にさまざまなカウントを取得できます。

SELECT
    Month,
    SUM(CASE WHEN Flag=1 THEN 1 ELSE 0 END) as count1,
    SUM(CASE WHEN Flag=2 THEN 1 ELSE 0 END) as count2
from
    ...
WHERE Month in ('11','12')
GROUP BY
    Month /* Other columns? */
于 2012-06-06T14:20:48.163 に答える
1

2 列のみの場合、次のようになります。

select
   (SELECT COUNT(*) FROM tablename WHERE Month='11' AND Flag = 1) as 'count1'
   (SELECT COUNT(*) FROM tablename WHERE Month='11' AND Flag = 2) as 'count2'

UNION ALL

select
   (SELECT COUNT(*) FROM tablename WHERE Month='12' AND Flag = 1), 
   (SELECT COUNT(*) FROM tablename WHERE Month='12' AND Flag = 2)

tablenameテーブルの名前に置き換えます。

于 2012-06-06T14:20:18.990 に答える
-1

これはどう:

select
    month, flag, count(*)
from
    table
where
    month in ('11', '12') and
    flag in (1, 2)
group by
    month, flag;
于 2012-06-06T14:19:33.487 に答える