Использование описаний дел в качестве сводной точки - DB2 SQL - PullRequest
0 голосов
/ 29 мая 2019

Я хочу получить список перевозчиков с указанием количества прицепного оборудования в отдельных столбцах.Я использую заявления дел для классификации различных типов оборудования, но я получаю несколько возвратов вместо того, чтобы видеть одно возвращение для каждого перевозчика.

Я попробовал 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

1 Ответ

0 голосов
/ 29 мая 2019

Используйте функции агрегирования и исправьте group by:

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_TYPE_CD (например), поэтому их не должно быть в GROUP BY.

...