3

次のようなテーブルがあります。

    日付、フラグ
    22/05/13 1
    22/05/13 1
    22/05/13 0
    23/05/13 1
    23/05/13 0

したがって、フラグの2つの可能な値を異なる列でカウントするクエリが必要です。

    日付 flag1 flag0
    22/05/13 2 1
    23/05/13 1 1

上記の方法でデータを取得するには、クエリをどのように記述すればよいですか?

4

3 に答える 3

5

このようなもの:

SELECT
    [date]
    SUM(CASE WHEN tbl.flag=0 THEN 1 ELSE 0 END) AS flag0,
    SUM(CASE WHEN tbl.flag=1 THEN 1 ELSE 0 END) AS flag1
FROM
    tbl
GROUP BY
    tbl.[date]
于 2013-05-22T14:25:15.783 に答える
5
SELECT [date], sum(flag) "flag1", sum(1-flag) "flag0"
FROM [table]
GROUP BY [date]

通常は SUM() 関数内で case ステートメントを使用しますが、この場合は単純な (そしてより高速な) 式を使用できることがわかります。

于 2013-05-22T14:25:57.723 に答える
2

PIVOT 関数を使用して結果を取得できます。

select date, [1] as flag1, [0] as flag0
from yt
pivot
(
  count(flag)
  for flag in ([1], [0])
) piv;

デモで SQL Fiddle を参照してください

于 2013-05-22T14:28:19.440 に答える