我的查询应该如何?

时间:2013-05-22 14:21:27

标签: sql sql-server sql-server-2008

我有一张这样的表:

    date,               flag
    22/05/13             1
    22/05/13             1
    22/05/13             0
    23/05/13             1
    23/05/13             0

所以我需要一个查询,其中我在不同的列中计算flag的2个可能值。

    date       flag1        flag0
    22/05/13    2            1
    23/05/13    1            1

我应该如何编写查询以便按照上面显示的方式获取数据?

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:5)

SELECT [date], sum(flag) "flag1", sum(1-flag) "flag0"
FROM [table]
GROUP BY [date]

通常我会在SUM()函数中使用case语句,但在这种情况下,我们可以使用简单(和更快)的表达式来解决这个问题。

答案 2 :(得分:2)

您可以使用PIVOT函数来获得结果:

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

请参阅SQL Fiddle with Demo