2016-05-13 4 views
0
  • Примечание: этот вопрос ранее был упрощен; вопрос был добавлен, чтобы лучше понять мою проблему.

У меня есть таблица данных о пересылке компании, называемой t_shipment. (Некоторые из них) заголовки acc_num, type_of_business, contract_exception, payment_status и т. Д.Ввод результатов комплексного подсчета() в таблицу

Мне нужно сделать recap-таблицу для работы другого отдела. Поэтому я создаю новую таблицу ship_recap, используя CREATE TABLE.

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);) 

И перестановки одной и той же логики (например, изменение запятой в точку с запятой или вынуть круглые скобки), но каждый раз он возвращал синтаксическую ошибку.

Таблица результатов/recap может содержать до 20+ заголовков, а другие запросы могут быть немного сложнее. Мне нужен способ правильно вставить данные SELECT/COUNT-ed в таблицу recap и сохранить их в одной строке.

РЕДАКТИРОВАТЬ: По предложению Рено, я попробовал это

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

Try следующий 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

Спасибо, но на самом деле запрос длиннее этого (мой плохой для упрощения). 'eg: INSERT INTO top_shipper (vol_lumber, vol_oil)' 'SELECT count (acc_num) from ship_main, где type_of_business = 'LMB' и (contract_exception = 'VALID' ИЛИ ​​payment_status IS NOT NULL), ' ' select count (acc_num), откуда type_of_busines = 'OIL' и (contract_exception = 'VALID' OR payment_status IS NOT NULL);) ' Таблица результатов/recap может иметь до 25 заголовков, и каждый запрос может быть немного сложнее. – Rheine

+0

@ Rheine Итак, почему бы вам не отредактировать свой пост еще раз, позвольте нам более четко ответить на ваш вопрос, пожалуйста.: D – Blank

+0

Отредактировано, пожалуйста, взгляните. Спасибо. – Rheine

Смежные вопросы