使用Case语句作为轴心-db2sql
我想要一份汽车运输公司的清单,拖车设备数量在单独的列中列出。我使用案例陈述对不同的设备类型进行分类,但我得到的是多个回报,而不是每个运营商一个回报 我尝试了ROW OVER()并得到了相同的结果使用Case语句作为轴心-db2sql,sql,db2,pivot,Sql,Db2,Pivot,我想要一份汽车运输公司的清单,拖车设备数量在单独的列中列出。我使用案例陈述对不同的设备类型进行分类,但我得到的是多个回报,而不是每个运营商一个回报 我尝试了ROW OVER()并得到了相同的结果 SELECT C.ECP_CARRIER_IDENT_ID AS ECP_ID, C.CARRIER_NM, C.MC_NB, C.DOT_NB, (CASE WHEN E.EQUIPMENT_TYPE_CD = 'TR' THEN E.EQUIPMENT_CT END) AS TRACTORS, (C
SELECT C.ECP_CARRIER_IDENT_ID AS ECP_ID, C.CARRIER_NM, C.MC_NB, C.DOT_NB,
(CASE WHEN E.EQUIPMENT_TYPE_CD = 'TR' THEN E.EQUIPMENT_CT END) AS TRACTORS,
(CASE WHEN E.EQUIPMENT_TYPE_CD = 'SV' THEN E.EQUIPMENT_CT END) AS VAN_TRLS,
(CASE WHEN E.EQUIPMENT_TYPE_CD = 'FT' THEN E.EQUIPMENT_CT END) AS FLATBEDS
FROM ECP_CARRIER C
JOIN ECP_CARRIER_EQUIPMENT E ON C.ECP_CARRIER_IDENT_ID = E.ECP_CARRIER_ID
WHERE CERTIFIED_FG = 1
GROUP BY C.ECP_CARRIER_IDENT_ID, C.CARRIER_NM, C.MC_NB, C.DOT_NB,
E.EQUIPMENT_TYPE_CD, E.EQUIPMENT_CT
我希望一切都在一排,但这是我得到的结果
ECP_NB CARRIER_NM MC_NB DOT_NB TRACTORS VAN_TRLS FLATBEDS
1234 Bob's Trucking 606066 66 10
1234 Bob's Trucking 606066 66 12
使用聚合函数并通过修复
分组:
SELECT C.ECP_CARRIER_IDENT_ID AS ECP_ID, C.CARRIER_NM, C.MC_NB, C.DOT_NB,
MAX(CASE WHEN E.EQUIPMENT_TYPE_CD = 'TR' THEN E.EQUIPMENT_CT END) AS TRACTORS,
MAX(CASE WHEN E.EQUIPMENT_TYPE_CD = 'SV' THEN E.EQUIPMENT_CT END) AS VAN_TRLS,
MAX(CASE WHEN E.EQUIPMENT_TYPE_CD = 'FT' THEN E.EQUIPMENT_CT END) AS FLATBEDS
FROM ECP_CARRIER C JOIN
ECP_CARRIER_EQUIPMENT E
ON C.ECP_CARRIER_IDENT_ID = E.ECP_CARRIER_ID
WHERE CERTIFIED_FG = 1
GROUP BY C.ECP_CARRIER_IDENT_ID, C.CARRIER_NM, C.MC_NB, C.DOT_NB;
GROUP BY
中的键组合应该定义结果集中所需的每一行。您不希望E.EQUIPMENT\u TYPE\u CD
(例如)有单独的行,因此它不应该在组中,BY
谢谢Gordon,但我收到一条错误消息,指出“一个表达式以”EQUIPMENT\u TYPE\u CD开头“在SELECT子句、HAVING子句或ORDER BY子句中指定的在GROUP BY子句中未指定,或者在SELECT子句、HAVING子句或ORDER BY中指定…”我不确定如何避免这种情况。我只是尝试添加了“MAX”“成功了。我从来不知道你需要在案件陈述中使用max。谢谢你的帮助,戈登。@BrianMinturn。CASE
表达式是MAX()
函数的参数。