Please click here for sample tables and description.通用SQL查询与组由
我有两个表“车辆”和“VEHICLE_CLASS”作为每附图像。
我需要一个查询来获取结果行,每个VEHICLE_CLASS按照状态分组了多少个VEHICLES,如附图所示。
查询应该是通用的,所以它可以在任何数据库(MySQL的/甲骨文/ MSSQL/DB2)
使用请帮助。
CREATE TABLE VEHICLE
(
VEHICLE_ID varchar(20),
VEHICLE_CLASS_ID varchar(30),
STATUS int
);
CREATE TABLE VEHICLE_CLASS
(
VEHICLE_CLASS_ID varchar(30),
VEHICLE_CLASS_NAME varchar(30)
);
INSERT INTO VEHICLE
(VEHICLE_ID, VEHICLE_CLASS_ID, STATUS)
VALUES
('vehicle_001', 'vehicle_class_001', 0),
('vehicle_002', 'vehicle_class_002', 1),
('vehicle_003', 'vehicle_class_003', 2),
('vehicle_004', 'vehicle_class_001', 0),
('vehicle_005', 'vehicle_class_002', 2),
('vehicle_006', 'vehicle_class_001', 0),
('vehicle_007', NULL, 1);
INSERT INTO VEHICLE_CLASS
(VEHICLE_CLASS_ID, VEHICLE_CLASS_NAME)
VALUES
('vehicle_class_001', 'ABC'),
('vehicle_class_002', 'BCD'),
('vehicle_class_003', 'EFG');
这里是我试过,但没能得到期望的结果查询:
SELECT veh.VEHICLE_CLASS_ID, vehclass.VEHICLE_CLASS_NAME,
SUM(CASE WHEN veh.STATUS=2 THEN COUNT(veh.VEHICLE_ID) end) Completed,
SUM(CASE WHEN veh.STATUS!=2 THEN COUNT(veh.VEHICLE_ID) end) not_completed
FROM VEHICLE veh LEFT JOIN VEHICLE_CLASS vehclass on veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID
GROUP BY veh.VEHICLE_CLASS_ID having veh.VEHICLE_CLASS_ID is not null;
+1,你打我答案。我做出的唯一改变(以及我在我的回答中做的)是用'<>'替换'!=',以便在不同的RDBM上工作 – Lamak
@Lamak这很奇怪。我总是写'<>',但它在SQL Server Oracle和MySQL上工作。 –
真的吗?我知道''='在SQL上工作,我认为我确信它不在MySQL上,也许他们会在更新的版本中添加它。很高兴知道!谢谢 – Lamak