SQL:根据其他列中的多个条件计算一列中的不同值

前端之家收集整理的这篇文章主要介绍了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).

以下查询可以正常传递’Total Bugs’

SELECT
Test,COUNT(DISTINCT Bug ID) AS "Total Bugs"
FROM
Table1
GROUP BY Test

我的研究让我对以下查询进行了修改.他们错过了明显的错误,因此返回“Open Bugs”列的错误结果(显示查询下方)

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(不确定发布).

任何帮助是极大的赞赏.

解决方法

您可以使用以下代码进行条件计数(不同):
SELECT Test,COUNT(DISTINCT "Bug ID") AS "Total Bugs",count(distinct (CASE WHEN "Status" <> 'Closed' THEN "Bug ID" END)) as "Open Bugs"
FROM Table1
GROUP BY Test

案例陈述检查条件.如果为true,则返回Bug ID.如果不存在,则默认为NULL,因此不会计算id.

原文链接:https://www.f2er.com/mssql/83920.html

猜你在找的MsSQL相关文章