2016-05-13 59 views
0
  • 注意:此問題之前已過於簡化;該問題已被追加,以更好地瞭解我的問題

我有一個公司的貨運數據表,名爲t_shipment。 (其中一些)標題是acc_num,type_of_business,contract_exception,payment_status等。將複數count()查詢結果插入表

我需要爲其他部門的工作側做一個回顧表。所以我使用CREATE TABLE創建了一個新表ship_recap。

CREATE TABLE ship_recap 
(vol_lumber(int), vol_oil(int);) 

然後我需要回顧從t_shipment到ship_recap的相關數據。我用

INSERT INTO ship_recap (vol_lumber) 
SELECT COUNT(acc_num) from t_shipment WHERE type_of_business = 'LMB' and (contract_exception = 'VALID' OR payment_status IS NOT NULL) 
INSERT INTO ship_recap (vol_oil) 
SELECT COUNT(acc_num) from t_shipment where type_of_business = 'OIL' and (contract_exception = 'VALID' OR payment_status IS NOT NULL);) 

它跑,但結果卻是:

____________________ 
|vol_lumber| vol_oil | 
---------------------- 
| 150 | NULL | 
| NULL | 230 | 
---------------------- 

而是我想他們是:

____________________ 
|vol_lumber| vol_oil | 
---------------------- 
| 150 | 230 | 
---------------------- 

我嘗試使用

INSERT INTO ship_recap (vol_lumber, vol_oil) 
(SELECT COUNT(acc_num) from t_shipment WHERE type_of_business = 'LMB' and (contract_exception = 'VALID' OR payment_status IS NOT NULL), 
SELECT COUNT(acc_num) from t_shipment where type_of_business = 'OIL' and (contract_exception = 'VALID' OR payment_status IS NOT NULL);) 

而且相同邏輯的排列(例如,改變逗號分號或取出括號),但每次都會返回語法錯誤。

結果/回顧表可能有多達20個標題,其他查詢也可能稍微複雜一點。 我需要一種方法來正確地將SELECT/COUNT-ed數據插入到概括表中,並將它們保存在一行中。

編輯:按照雷諾的建議,我想這

CREATE TABLE ship_recap (vol_OIL int,vol_LUM int,vol_BEV int,processed_OIL int,processed_LUM int,processed_BEV int); 
INSERT INTO ship_recap (vol_OIL, vol_LUM, vol_BEV, processed_OIL, processed_LUM, processed_BEV) 
SELECT 
    COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12', 1, NULL)), 
    COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12', 1, NULL)), 
    COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12', 1, NULL)), 
    COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)), 
    COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)), 
    COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)) FROM t_shipment; 

它的工作,一旦我糾正了缺少的參數和括號。

+1

'SELECT SUM(水果= '蘋果')蘋果,SUM(水果= '香蕉')香蕉FROM MY_TABLE;'我不知道爲什麼你會存儲這個派生的數據 – Strawberry

回答

0

嘗試下面的SQL,可能會幫助你;)

CREATE TABLE ship_recap (vol_OIL int,vol_LUM int,vol_BEV int,processed_OIL int,processed_LUM int,processed_BEV int); 
INSERT INTO ship_recap (vol_OIL, vol_LUM, vol_BEV, processed_OIL, processed_LUM, processed_BEV) 
SELECT 
    COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12', 1, NULL)), 
    COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12', 1, NULL)), 
    COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12', 1, NULL)), 
    COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)), 
    COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)), 
    COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)) FROM t_shipment; 
+0

謝謝,但實際上查詢比這更長(我的過於簡單化它不好)。 ='LMB'且(contract_exception ='VALID'或payment_status不爲NULL),' 'select count(acc_num)from type_of_busines ='OIL'and(contract_exception ='VALID'OR payment_status IS NOT NULL);)' 結果/回顧表可能有多達25個標題,每個查詢也可能稍微複雜一點。 – Rheine

+0

@Rheine那麼你爲什麼不重新編輯你的帖子,讓我們更清楚你的問題please.:D – Blank

+0

編輯,請看看。謝謝。 – Rheine