3

我有一张这样的桌子:

    日期、标志
    22/05/13 1
    22/05/13 1
    22/05/13 0
    23/05/13 1
    23/05/13 0

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

    日期标志1标志0
    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 回答