具有多个条件的多个SQL计数

时间:2011-03-30 20:26:08

标签: sql sql-server select count

我一直在尝试优化从数据库中检索数据的方式,以便在“仪表板”类型的页面上显示以进行软件开发

我的数据库结构如下:

  • 要求表包含各种字段的所有各种要求,但重要的是REQ_ID作为密钥。
  • 任务包含的表可以包含多个任务,包括TASK_ID,TASK_NAME(DEV,TEST或RELEASE),TASK_STATUS(未启动,完成,已阻止),TASK_WINDOW(第1周,第2周,......等任务完成时)和使用REQ_I返回需求的链接。例如,一个需求可能有多个开发任务,测试任务和发布任务,但只有在与需求相关的所有开发任务完成时才能完成,否则它是不完整的

我想查询这两个表,为我提供一个结果集,其中包含单个查询中每个DEV任务窗口的DEV Complete,Test Complete和Release Complete要求的编号。我目前正在执行多个查询,每个查询都包含子查询,然后使用PHP聚合结果,但这总共需要15秒才能执行,任何人都可以帮我将其合并为一个查询>

2 个答案:

答案 0 :(得分:11)

SELECT r.REQ_ID, 
       SUM(CASE WHEN t.TASK_NAME = 'DEV' THEN 1 ELSE 0 END) AS DevComplete,
       SUM(CASE WHEN t.TASK_NAME = 'TEST' THEN 1 ELSE 0 END) AS TestComplete,
       SUM(CASE WHEN t.TASK_NAME = 'RELEASE' THEN 1 ELSE 0 END) AS ReleaseComplete
    FROM Requirements r
        INNER JOIN Tasks t
            ON r.REQ_ID = t.REQ_ID
    WHERE t.TASK_STATUS = 'Complete'
    GROUP BY r.REQ_ID

答案 1 :(得分:0)

我意识到这是一个老问题,但我用以下模式进行了测试:

模式1:

SELECT
 [Count1] = SUM(CASE WHEN ... THEN 1 ELSE 0 END),
 [Count2] = SUM(CASE WHEN ... THEN 1 ELSE 0 END)
FROM
 [Table]
GROUP BY
 [Field]

模式2:

SELECT
  [COUNT1] = (SELECT COUNT(*) FROM [Table] WHERE ...),
  [Count2] = (SELECT COUNT(*) FROM [Table] WHERE ...)

就我而言,在运行两个查询时,模式2占用了36%的时间,模式1占用了64%。对我来说,模式1看起来更优雅,但在我的场景中它的表现几乎没有。