次のようなテーブルがあります。
日付、フラグ 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
上記の方法でデータを取得するには、クエリをどのように記述すればよいですか?
次のようなテーブルがあります。
日付、フラグ 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
上記の方法でデータを取得するには、クエリをどのように記述すればよいですか?
このようなもの:
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]
SELECT [date], sum(flag) "flag1", sum(1-flag) "flag0"
FROM [table]
GROUP BY [date]
通常は SUM() 関数内で case ステートメントを使用しますが、この場合は単純な (そしてより高速な) 式を使用できることがわかります。
PIVOT 関数を使用して結果を取得できます。
select date, [1] as flag1, [0] as flag0
from yt
pivot
(
count(flag)
for flag in ([1], [0])
) piv;
デモで SQL Fiddle を参照してください