用于检索标记行/总计行的TSQL查询
我正在努力找到以下问题的解决方案。 假设有一张这样的桌子用于检索标记行/总计行的TSQL查询,sql,sql-server,sql-server-2008,tsql,pivot,Sql,Sql Server,Sql Server 2008,Tsql,Pivot,我正在努力找到以下问题的解决方案。 假设有一张这样的桌子 COL1 FLAG aaa 1 aaa 0 aaa 1 bbb 0 我需要编写一个查询以获得以下输出: COL1_VALUE FLAGGED TOTAL aaa 2 3 bbb 0 1 其中,FLAGGED column包含FLAG=1的“aaa”行值的总计数,total column是包含“aaa”的行总数,换句话说,查找相对于包含“aaa”的行总数,标记了包含
COL1 FLAG
aaa 1
aaa 0
aaa 1
bbb 0
我需要编写一个查询以获得以下输出:
COL1_VALUE FLAGGED TOTAL
aaa 2 3
bbb 0 1
其中,FLAGGED column包含FLAG=1的“aaa”行值的总计数,total column是包含“aaa”的行总数,换句话说,查找相对于包含“aaa”的行总数,标记了包含“aaa”的行的数量。单次查询是否可行?(即不使用温度表等)
(MSSQL2008)它被称为“pivot”-如果您检查pivot标记,会有很多示例。标志的数据类型是什么?它是
位
?它被称为“pivot”-如果你检查pivot标签,会有很多例子。标志
的数据类型是什么?是bit
?对不起,我读过“相对于包含“aaa”的行总数,标记了多少包含“aaa”的行”,但没有看到预期的结果。你说得对+1遗憾的是,我已经阅读了“相对于包含“aaa”的行总数,有多少包含“aaa”的行被标记”,但没有看到预期的结果。你说得对+1如果FLAG
为BIT
则需要SUM(CAST(FLAG AS INT))
这也是一个很好的解决方案,不使用CASE..WHEN。感谢Martin对CAST的提示。如果FLAG
是BIT
,则需要SUM(CAST(FLAG AS INT))
这也是一个很好的解决方案,不使用CASE..WHEN。感谢Martin对CAST的提示。COUNT(如果Tab.FLAG=1,则为1,否则为0结束)作为标记将不起作用<代码>计数
计数非空行。CASE
表达式的两个分支的计算结果均为notnull
,因此它实际上与COUNT(*)
应该COUNT(当Tab.FLAG=1时,CASE为1,否则为0结束)
beSUM(当Tab.FLAG=1时,CASE为1,否则为0结束)
计数(当Tab.FLAG=1,则为1,否则为0结束)标记为的
将不起作用<代码>计数计数非空行。CASE
表达式的两个分支的计算结果均为notnull
,因此它实际上与COUNT(*)
应该COUNT(当Tab.FLAG=1时,CASE为1,否则为0结束)
beSUM(当Tab.FLAG=1时,CASE为1,否则为0结束)
SELECT COL1 AS COL1_VALUE,
COUNT(CASE WHEN FLAG = 1 THEN 1 END) AS FLAGGED,
COUNT(*) AS TOTAL
FROM YourTable
GROUP BY COL1
SELECT COL1, SUM(FLAG) AS FLAGGED, Count(*) AS TOTAL from tbl GROUP BY COL1
SELECT Tab.COL1 AS COL1_VALUE,
SUM(CASE WHEN Tab.FLAG = 1 THEN 1 ELSE 0 END) AS FLAGGED,
COUNT(*) AS TOTAL
FROM Tab
GROUP BY Tab.COL1