2016-05-13 15 views
0
  • 注:この質問は以前は単純化されていました。

私はt_shipmentと呼ばれる会社の出荷データテーブルを持っています。 (いくつかの)ヘッダーは、acc_num、type_of_business、contract_exception、payment_statusなどです。テーブルへの複雑なcount()クエリ結果の挿入

他の部門の作業のための要約表を作成する必要があります。そこで私はCREATE TABLEを使って新しいテーブルship_recapを作成します。

次に、関連するデータを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データをリキャップテーブルに正しく挿入して1つの行に保持する方法が必要です。

EDIT:リノの提案を1として、私はそれは私が不足しているパラメータと括弧を修正かつて働いていたこの

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

MY_TABLE FROM 'SELECT SUM(果実は= 'りんご')リンゴ、SUM(果実は= 'バナナ')バナナ);'私は理由は分かりません(それをoversimplifyingための私の悪い。)あなたは – 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

おかげで、この得られたデータを格納しますが、実際にクエリがより長いです '例えば:ship_mainどこtype_of_businessから' 'SELECT COUNT(acc_num)(vol_lumber、vol_oil)top_shipper。INSERT INTO type_of_busines = 'OIL'と(contract_exception = 'VALID' OR)のいずれかを選択カウント(acc_num) '=' LMB 'および(contract_exception =' VALID 'またはpayment_status IS NOT NULL)、' ' ) 結果/リキャップテーブルには最大25個のヘッダーがあり、各クエリはやや複雑になる場合があります。 – Rheine

+0

@Rheineなぜあなたの投稿を編集しないでください、あなたの質問にもっと明確にしてください:D – Blank

+0

編集してください。ありがとうございました。 – Rheine

関連する問題