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