- 注意:这个问题之前被过于简单化了;附加问题是为了更好地理解我的问题
我有一家公司的发货数据表,名为 t_shipment。 (部分) header 包括 acc_num、type_of_business、contract_exception、 payment_status 等。
我需要为其他部门的工作制作一个回顾表。因此,我使用 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 个以上的 header ,其他查询也可能会变得稍微复杂一些。 我需要一种方法来正确地将 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;
一旦我更正了丢失的参数和括号,它就起作用了。
最佳答案
尝试下面的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;
关于mysql - 将复杂的 count() 查询结果插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201418/