SQL结合了不同的查询

时间:2013-06-03 15:59:28

标签: sql

抱歉初学者问题。但是,如何将这些查询放入一个数据集而不是多个查询?他们都被从同一张桌子上拿走了。另外你可以看到有一个“Open_Time”这是一个DATE格式。我怎么写这个来说AND open_date是在过去的60天内?

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='Crosby'
AND Severity=4
AND Open_Time<=60;

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='Crosby'
AND Severity=5
AND Open_Time<=60;

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='Crosby'
AND Severity=4
AND Close_Time<=60;

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='Crosby'
AND Severity=4
AND Close_Time<=60;

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='EUC'
AND Severity=4
AND Open_Time<=60;

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='EUC'
AND Severity=5
AND Open_Time<=60;

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='EUC'
AND Severity=4
AND Close_Time<=60;

SELECT COUNT(P_NUMBER)
FROM PROBLEM_REPORT
WHERE Assignment='EUC'
AND Severity=4
AND Close_Time<=60;

3 个答案:

答案 0 :(得分:1)

试试这个sql。

SELECT COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND DATEDIFF(CURDATE(),Open_Time)<=60 THEN P_NUMBER END) as p1,
    COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND DATEDIFF(CURDATE(),Open_Time)<=60  THEN P_NUMBER END) as p2,
    COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p3,
    COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p4,
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND DATEDIFF(CURDATE(),Open_Time)<=60 THEN P_NUMBER END) as p5,
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND DATEDIFF(CURDATE(),Open_Time)<=60 THEN P_NUMBER END) as p6,
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p7,
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p8
FROM PROBLEM_REPORT
WHERE Assignment IN('EUC','Crosby')
AND Severity IN(4,5)

答案 1 :(得分:1)

这样做的一种方法:

SELECT 
SUM(CASE WHEN Assignment = 'Crosby' AND Severity=4 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number1
,SUM(CASE WHEN Assignment = 'Crosby' AND Severity=5 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number2
,SUM(CASE WHEN Assignment = 'Crosby' AND Severity=4 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number3
,SUM(CASE WHEN Assignment = 'Crosby' AND Severity=5 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number4
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=4 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number5
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=5 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number6
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=4 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number7
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=5 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number8
FROM PROBLEM_REPORT

答案 2 :(得分:0)

查询中有WHERE子句会使查询更快,因为它只会计算过滤后的行。

SELECT  COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND Open_Time <= 60 THEN P_NUMBER END),
        COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND Open_Time <= 60 THEN P_NUMBER END),
        COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND Close_Time <= 60 THEN P_NUMBER END),
        COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND Close_Time <= 60 THEN P_NUMBER END),
        COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND Open_Time <= 60 THEN P_NUMBER END),
        COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND Open_Time <= 60 THEN P_NUMBER END),
        COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND Close_Time <= 60 THEN P_NUMBER END),
        COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND Close_Time <= 60 THEN P_NUMBER END)
FROM    PROBLEM_REPORT
WHERE   Assignment IN ('Crosby', 'EUC') AND
        Severity IN (4,5) AND
        (Open_Time <= 60 OR Close_Time <= 60)