Я хочу разделить на два столбца (PROJECT_ID и CATEGORY_NAME), и у меня возникли проблемы с написанием правильного синтаксиса. Мой запрос ниже функциональен, но когда я пытаюсь добавить дополнительное предложение over, он работает неправильно. Рекурсивный запрос использовался для конкатенации разбиения строк на project_id, создавая список админов, объединяющих и конкатенации name_last и name_first, чтобы составить список. Мне нужно использовать дополнительный элемент over, чтобы включить CATEGORY_NAME из-за администраторов в списке, которые работают в разных категориях («INVISION» AND «INSIGHT»), но находятся под одним и тем же project_id. Первый подзапросраздел на два столбца
SELECT
RowNumber() over (PARTITION BY F13.DIM_PROJECT_ID, F13.CATEGORY_NAME ORDER BY F13.PROJECT_NAME),
F13.DIM_PROJECT_ID.....etc.
извлекает правильные данные, я просто уверен в том, чтобы тянуть, что правильные данные из разделов оба проекта и категорией. Я использую db2.
with
t1(rowNum, PROJECT_ID, NAME_LAST, NAME_FIRST, POINT_OF_CONTACT, PROJECT_NAME, BUSINESS_NAME) as
(
SELECT
RowNumber() over (PARTITION BY F13.DIM_PROJECT_ID, F13.CATEGORY_NAME ORDER BY F13.PROJECT_NAME),
F13.DIM_PROJECT_ID,
F2P.NAME_LAST,
F2P.NAME_FIRST,
REPLACE(F2P.POINT_OF_CONTACT, ',', ' |') AS POINT_OF_CONTACT,
F13.PROJECT_NAME,
F2H.CATEGORY_NAME,
FROM FACT_TABLE AS F13
INNER JOIN ADMIN AS F2P ON F13.DIM_PROJECT_ID = F2P.DIM_PROJECT_ID
LEFT JOIN HOURS AS F2H ON F13.DIM_PROJECT_ID = F2H.DIM_PROJECT_ID
WHERE F2H.CATEGORY_NAME = ('INVISION')
group by
F13.DIM_PROJECT_ID,
F13.PROJECT_NAME,
F2P.NAME_LAST,
F2P.NAME_FIRST,
F2P.POINT_OF_CONTACT,
F2H.CATEGORY_NAME
) ,
t2(PROJECT_ID, LIST, POINT_OF_CONTACT, PROJECT_NAME, BUSINESS_NAME, cnt) AS
(SELECT PROJECT_ID,
VARCHAR(NAME_FIRST CONCAT ' ' CONCAT NAME_LAST, 6000),
POINT_OF_CONTACT,
PROJECT_NAME,
CATEGORY_NAME,
1
FROM t1
WHERE rowNum = 1
UNION ALL
SELECT t2.PROJECT_ID,
t2.list || ' | ' || t1.NAME_FIRST CONCAT ' ' CONCAT t1.NAME_LAST,
t1.POINT_OF_CONTACT,
t1.PROJECT_NAME,
t1.CATEGORY_NAME
FROM t2, t1
WHERE t2.project_id = t1.project_id
AND t2.cnt + 1 = t1.rowNum)
SELECT PROJECT_ID,
PROJECT_NAME,
POINT_OF_CONTACT,
CATEGORY_NAME
list
FROM t2
WHERE (PROJECT_ID, cnt) IN (
SELECT PROJECT_ID, MAX(rowNum)
FROM t1
GROUP BY PROJECT_ID)
Результаты, которые я получаю производят дубликаты, но только тогда, когда второй столбец (category_name включен в пункте раздела Текущие результаты:.
Желаемые результаты:
Вы пытаетесь получить 2 разных набора чисел строк, один подсчет на основе каждого dim_project_id и второй набор номеров строк для каждого category_name? В общем случае полезно показать некоторые примерные данные и ожидаемые результаты ... –
Первоначально это был мой подход, но я не понимал, что несколько столбцов поддерживаются разделом. Я изменил свой вопрос выше, чтобы отразить изменения, которые я сделал. Теперь я получаю повторяющиеся результаты. Я приложу образец и ожидаемые результаты. – Tone