2012-07-12 72 views
1

我有兩個不同的查詢產生了正確的結果,但我希望讓他們在一個表中生成答案。我怎麼做?在一個答案下加入兩個不同的查詢

這裏是我的代碼:

SELECT count(distinct ID) as NoOfEmployees 
FROM Table_Name 
WHERE date<= '2012-05-31'; 

select count(subA.ID) as EmployeesChanged from (
SELECT A.ID 
FROM Table_Name A 
WHERE A.date < '2012-06-01' 
GROUP BY 1 
HAVING COUNT(A.Service_type) > 1) subA 

目前,我有以下的輸出:

 
Number of Employees 
x 
 
Employees Changed 
x 

如何使它

 
Number of Employees | Employees Changed | (Number of employees - number changed) 
x     |    x  |   x 

回答

2

我不知道你使用什麼數據庫。但是,對於某些數據庫,你可以嘗試:

select q1.Value, q2.Value, q1.Value - q2.Value from 
    (SELECT count(distinct ID) as Value FROM Table_Name 
    WHERE date<= '2012-05-31') q1, 
    (select count(subA.ID) as Value from 
     (SELECT A.ID FROM Table_Name A 
     WHERE A.date < '2012-06-01' GROUP BY 1 
     HAVING COUNT(A.Service_type) > 1) subA) q2 
0

您可以使用CROSS JOIN

SELECT a.*, b.*, a.NoOfEmployees - b.EmployeesChanged 
FROM 
(
    SELECT count(distinct ID) as NoOfEmployees 
    FROM Table_Name 
    WHERE date<= '2012-05-31' 
) a 
CROSS JOIN 
(
    SELECT count(subA.ID) as EmployeesChanged 
    FROM 
    (
     SELECT A.ID 
     FROM Table_Name A 
     WHERE A.date < '2012-06-01' 
     GROUP BY 1 
     HAVING COUNT(A.Service_type) > 1 
    ) subA 
) b 

編輯:

您可能能夠通過使用條件的聚集,而不是大大優化查詢執行兩個單獨的查詢:

SELECT a.NoOfEmployees, a.EmployeesChanged, a.NoOfEmployees - a.EmployeesChanged 
FROM 
(
    SELECT 
     COUNT(DISTINCT CASE WHEN date <= '2012-05-31' THEN ID END) as NoOfEmployees, 
     COUNT(DISTINCT CASE WHEN date < '2012-06-01' AND COUNT(Service_type) > 1 THEN ID END) AS EmployeesChanged 
    FROM Table_Name 
    GROUP BY ID 
) a 
+0

非常感謝。 *。*究竟意味着什麼?那是查詢結果嗎? – DatWunGuy102 2012-07-12 19:51:45

+0

@ user1519731,是的。由於選擇中只有一列,所以使用通配符「*」更簡潔。 – 2012-07-12 19:52:47

0

如果日期< ='2012-05-31'與A.date <'2012-06-01'相同?

SELECT COUNT(1) AS NoOfEmployees, 
SUM(CASE WHEN STCount > 0 then 1 else 0 end) as HasChange, 
SUM(CASE WHEN STCount = 0 then 1 else 0 end) as NoChange 
FROM 
    (SELECT ID, 
    COUNT(A.Service_type) STCount 
    FROM Table_Name 
    WHERE date<= '2012-05-31' 
    GROUP BY ID) AS Data