使用Case语句作为轴心-db2sql

使用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

我想要一份汽车运输公司的清单,拖车设备数量在单独的列中列出。我使用案例陈述对不同的设备类型进行分类,但我得到的是多个回报,而不是每个运营商一个回报

我尝试了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,
(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()
函数的参数。