2013-01-11 33 views
0

我想从缺陷数据库构建查询。每个缺陷有提交日期和状态(开,关,延期等),我想我的结果设置有3列:具有相同列的SQL查询w/2

Date, # bugs w/ Open status, # bugs with Closed status 
2012-05-31, 3, 1 
2012-06-01, 2, 0 
2012-06-02, 3, 2 

我不知道如何超越这个查询得到什么我想要:

select 
    DEFECT.SUBMITTED_DATE as "Opened", 
    count (DEFECT.SUBMITTED_DATE), 
    DEFECT.STATUS as "Status" 
from 
    DEFECT 
where 
    DEFECT.STATUS='Open' or DEFECT.STATUS='Fixed' 
group by 
    DEFECT.SUBMITTED_DATE 

寻找建议。

+0

你想要三列吗? – Woot4Moo

+0

你正在使用什么rdbms? MySQL的? SQL Server?甲骨文? –

回答

1

在MySQL中,

SELECT DATE(DEFECT.SUBMITTED_DATE) as `DATE_SUBMITTED`, 
     SUM(CASE WHEN DEFECT.STATUS='Open' THEN 1 ELSE 0 END) `# bugs w/ Open status`, 
     SUM(CASE WHEN DEFECT.STATUS='Fixed' THEN 1 ELSE 0 END) `# bugs with Closed status`, 
FROM  DEFECT 
GROUP BY DATE(DEFECT.SUBMITTED_DATE) 

在TSQL

SELECT CAST(DEFECT.SUBMITTED_DATE as DATE) as [DATE_SUBMITTED], 
     SUM(CASE WHEN DEFECT.STATUS='Open' THEN 1 ELSE 0 END) [# bugs w/ Open status], 
     SUM(CASE WHEN DEFECT.STATUS='Fixed' THEN 1 ELSE 0 END) [# bugs with Closed status], 
FROM  DEFECT 
GROUP BY CAST(DEFECT.SUBMITTED_DATE as DATE) 
+0

hmm where子句似乎多余 – Woot4Moo

1

尝试:

SELECT DEFECT.SUBMITTED_DATE as DATE_SUBMITTED, 
    SUM(CASE WHEN DEFECT.STATUS = 'Open' THEN 1 ELSE 0 END) AS `# bugs w/ Open status`, 
    SUM(CASE WHEN DEFECT.STATUS = 'Fixed' THEN 1 ELSE 0 END) AS `# bugs w/ Open status` 
FROM DEFECT 
WHERE DEFECT.STATUS IN ('Open', 'Fixed') 
GROUP BY DEFECT.SUBMITTED_DATE 
+0

我给你我的[sqlfiddle](http://sqlfiddle.com/#!2/8e841/3);) – bonCodigo

+0

@bonCodigo:它与(工作)提供的查询不匹配... :) 你什么意思 ? (顺便说一句,我加了一个逗号,我忘了) –

+0

它。 OP还没有提供表格/样本数据..但正确的查询工作。 – bonCodigo

0

假设MS SQL服务器:

SELECT DEFECT.SUBMITTED_DATE as [Date] 
,SUM(CASE WHEN DEFECT.STATUS = 'Open' THEN 1 ELSE 0 END) AS number_open 
,SUM(CASE WHEN DEFECT.STATUS = 'Fixed' THEN 1 ELSE 0 END) AS number_fixed 
FROM DEFECT 
WHERE DEFECT.STATUS IN ('Open' ,'Fixed') 
GROUP BY DEFECT.SUBMITTED_DATE 
相关问题