SQL查询w / 2的同一列

时间:2013-01-11 14:49:49

标签: sql

我想从缺陷数据库构建查询。每个缺陷都有提交日期和状态(打开,关闭,延期等)我希望我的结果设置为3列:

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

寻找建议。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分:0)

假设MS SQL Server:

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