Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于检索标记行/总计行的TSQL查询_Sql_Sql Server_Sql Server 2008_Tsql_Pivot - Fatal编程技术网

用于检索标记行/总计行的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结束)
be
SUM(当Tab.FLAG=1时,CASE为1,否则为0结束)
计数(当Tab.FLAG=1,则为1,否则为0结束)标记为的
将不起作用<代码>计数计数非空行。
CASE
表达式的两个分支的计算结果均为
notnull
,因此它实际上与
COUNT(*)
应该
COUNT(当Tab.FLAG=1时,CASE为1,否则为0结束)
be
SUM(当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