partition über zwei Spalten
Ich bin zu wollen, um die partition um zwei Spalten (PROJECT_ID, UND CATEGORY_NAME) und ich habe Probleme beim schreiben der korrekten syntax. Meine Anfrage unten ist funktional, aber wenn ich versuche, fügen Sie eine zusätzliche over-Klausel funktioniert es nicht richtig. Die rekursive Abfrage wurde zum verketten von Zeilen Partitionierung über project_id, die Erstellung einer Liste von admins kombinieren und verketten name_last und name_first machen Sie eine Liste. Ich brauche eine zusätzliche over-Klausel enthalten, die CATEGORY_NAME durch admins in der Liste, die Arbeit in den verschiedenen Kategorien ('INVISION' UND 'INSIGHT') aber sind unter den gleichen project_id. Die erste Unterabfrage
SELECT
RowNumber() over (PARTITION BY F13.DIM_PROJECT_ID, F13.CATEGORY_NAME ORDER BY F13.PROJECT_NAME),
F13.DIM_PROJECT_ID.....etc.
extrahiert die richtigen Daten, ich bin nur nicht sicher, wie zu ziehen, dass die richtigen Daten Partitionierung durch Projekt und Kategorie. Ich bin mit 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 )
Die Ergebnisse, die ich bekommen hab sind die Herstellung von Duplikaten, aber nur, wenn die zweite Spalte (category_name ist in der partition-Klausel. Die aktuellen Ergebnisse:
Gewünschten Ergebnisse:
- Versuchst du 2 verschiedene Sätze von Zeile zahlen, ein zählen, basierend auf den einzelnen dim_project_id, und einen zweiten Satz von Zeilennummern für jede category_name? Es auch generell nützlich ist, zeigen einige Beispiel-Daten und die erwarteten Ergebnisse...
- Zunächst war das mein Ansatz, aber ich wusste nicht, mehrere Spalten unterstützt wurden, indem Sie die partition-Klausel. Ich änderte meine Frage oben zu reflektieren, die änderung, die ich gemacht. Jetzt bin ich immer doppelte Ergebnisse. Werde ich legen Sie eine Probe und erwarteten Ergebnisse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich es herausgefunden. Ich fügte hinzu, eine ID für Kategorie und partitioniert category_id und project_id.