2015-06-15 30 views
0

我想爲選擇customer idcus_nameTotal COD Orders作出一個查詢。我做了這兩個查詢,但這些查詢分別計算CODNON COD。我如何使用子查詢進行單個查詢。查詢選擇ID,名稱,使用子查詢的交貨成本

SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' 
FROM T_Acct_CompanyProfile c INNER JOIN 
    T_Inv_Order o 
    ON c.id = o.cust_id 
WHERE c.type_id = 1 AND o.cod = 1 
GROUP BY o.cust_id, c.name; 

SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' 
FROM T_Acct_CompanyProfile c INNER JOIN 
    T_Inv_Order o 
    ON c.id = o.cust_id 
WHERE c.type_id = 1 AND o.cod = 0 
GROUP BY o.cust_id, c.name; 
+0

SQL SERVER 2008 –

回答

1

由於查詢看起來非常相似,您可以使用union。因此,您的查詢變爲:

SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c 
INNER JOIN T_Inv_Order o ON c.id = o.cust_id 
WHERE c.type_id = 1 AND o.cod = 1 
group by o.cust_id, c.name 

UNION 

SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' FROM T_Acct_CompanyProfile c 
INNER JOIN T_Inv_Order o ON c.id = o.cust_id 
WHERE c.type_id = 1 AND o.cod = 0 

group by o.cust_id, c.name 

這會將兩個查詢合併到一個結果集中。有關Union關鍵字的更多信息,請參閱http://www.w3schools.com/sql/sql_union.asp

+0

我想這是你在爲你描述的代碼UNOIN,但這是給錯誤如下所列:「消息8120,級別16,狀態1,行 列「T_Inv_Order。 cust_id'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。「 –

+0

我做了一個編輯,包括第一組,因爲我不小心錯過了它。你是否在選擇的兩個部分中通過組來嘗試它? –

0

只需使用條件彙總:

SELECT o.cust_id, UPPER(c.name), 
     SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) as TotalCODOrders, 
     SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) as TotalNonCODOrders 
FROM T_Acct_CompanyProfile c INNER JOIN 
    T_Inv_Order o 
    ON c.id = o.cust_id 
WHERE c.type_id = 1 
GROUP BY o.cust_id, c.name; 

如果o.cod只對值0和1,那麼您可以使用快捷:

SELECT o.cust_id, UPPER(c.name), 
     SUM(o.cod = 1) as TotalCODOrders, 
     SUM(1 - o.cod) as TotalNonCODOrders, 
0

使用聯盟

SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' 
FROM T_Acct_CompanyProfile c INNER JOIN 
    T_Inv_Order o 
    ON c.id = o.cust_id 
WHERE c.type_id = 1 AND o.cod = 1 
GROUP BY o.cust_id, c.name; 

UNION 

SELECT o.cust_id, UPPER(c.name), count(o.order_no) AS 'Total COD Orders' 
FROM T_Acct_CompanyProfile c INNER JOIN 
    T_Inv_Order o 
    ON c.id = o.cust_id 
WHERE c.type_id = 1 AND o.cod = 0 
GROUP BY o.cust_id, c.name; 
+0

我會使用工會所有,因爲你不想要一個獨特的,我會添加'o.cod'能夠看到哪個計數是哪個 –

2

有條件聚合:

SELECT o.cust_id, 
     UPPER(c.name), 
     SUM(CASE WHEN o.cod = 1 THEN 1 ELSE 0 END) AS 'Total COD Orders', 
     SUM(CASE WHEN o.cod = 0 THEN 1 ELSE 0 END) AS 'Total non COD Orders' 
FROM T_Acct_CompanyProfile c 
INNER JOIN T_Inv_Order o ON c.id = o.cust_id 
WHERE c.type_id = 1 
group by o.cust_id, c.name