4
我试图根据多个条件来计算不同的值。 示例数据练习如下。SQL:根据其他列中的多个条件从一列中计算不同的值
Table1 ╔════════╦════════╦══════╗ ║ Bug ID ║ Status ║ Test ║ ╠════════╬════════╬══════╣ ║ 1 ║ Open ║ w ║ ║ 2 ║ Closed ║ w ║ ║ 3 ║ Open ║ w ║ ║ 4 ║ Open ║ x ║ ║ 4 ║ Open ║ x ║ ║ 5 ║ Closed ║ x ║ ║ 5 ║ Closed ║ x ║ ║ 5 ║ Closed ║ y ║ ║ 6 ║ Open ║ z ║ ║ 6 ║ Open ║ z ║ ║ 6 ║ Open ║ z ║ ║ 7 ║ Closed ║ z ║ ║ 8 ║ Closed ║ z ║ ╚════════╩════════╩══════╝ Desired Query Results ╔══════╦═══════════╦════════════╗ ║ Test ║ Open Bugs ║ Total Bugs ║ ╠══════╬═══════════╬════════════╣ ║ w ║ 2 ║ 3 ║ ║ x ║ 1 ║ 2 ║ ║ y ║ 0 ║ 1 ║ ║ z ║ 1 ║ 3 ║ ╚══════╩═══════════╩════════════╝
给定的Bug可以在多次测试中找到,多次用于相同的测试(例如:6)或两者(例如:5)。
下面的查询工作正常,准确地提供“全方位错误”
SELECT
Test,
COUNT(DISTINCT Bug ID) AS "Total Bugs"
FROM
Table1
GROUP BY Test
我的研究使我对下面的查询变化。他们错过了不同的错误,因此为“打开错误”列返回不正确的结果(查询如下所示)
SELECT
Test,
SUM(CASE WHEN Status <> 'Closed' THEN 1 ELSE 0 END) AS "Open Bugs"
FROM
Table1
GROUP BY Test
╔══════╦═══════════╗ ║ Test ║ Open Bugs ║ ╠══════╬═══════════╣ ║ w ║ 2 ║ ║ x ║ 2 ║ ║ y ║ 0 ║ ║ z ║ 3 ║ ╚══════╩═══════════╝
当然我的最终结果必须在一个表中提供两个计数列(而不是像我为演示目的而使用单独的查询)。
我不想依赖多个子查询,因为我的现场示例将具有两个以上的列,并且来自同一个表的计数但具有各种条件。
我正在使用SQL Server(不知道发布)。
任何帮助,非常感谢。
非常有帮助。我不知道你可以在'THEN'之后引用列。谢谢! – Blake 2013-04-22 21:23:15