Frage

Angesichts dieses Starts CTE:

WITH Sections AS (
   SELECT 1 Section, 1 StartUnit, 5 EndUnit FROM DUAL
   UNION ALL SELECT 2, 0, 2 FROM DUAL
   UNION ALL SELECT 3, 1, 1 FROM DUAL
), 

Wie generiere ich ein Ergebnissatz, das in Abschnitt so viele Zeilen pro Zeile enthält, wie es Zahlen zwischen StartUnit und EndUnit (inklusive) gibt, wobei Werte aufsteigen?

Das heißt, ich würde gerne ein Ergebnis sehen:

Section  Unit
1        1
1        2
1        3
1        4
1        5
2        0
2        1
2        2
3        1

Beachten Sie, dass einige der Werte in den Abschnitten CTE Parameter sein, sodass es nicht so einfach ist, meine Gewerkschaften auf die richtige Zahl zu erweitern.

AKTUALISIEREN

Ich habe ein bisschen mehr darüber nachgedacht und habe eine weitere Richtlinie. Ich werde jede Antwort nutzen, die korrekt ist, aber besonders hoffte, dass jemand möglicherweise zeigt, wie er dies mit Connect von Prior und Ohne zusätzlichen CTE in der Mitte macht ...

Mir wurde klar, dass ich das CTE zu diesem ändern konnte:

WITH Sections AS (
   SELECT 1 Section, LEVEL Unit FROM DUAL CONNECT BY LEVEL <= 5
   UNION ALL SELECT 2, LEVEL - 1 FROM DUAL CONNECT BY LEVEL <= 3
   UNION ALL SELECT 3, 1 FROM DUAL CONNECT BY LEVEL <= 1
)

Aber ich beuge mich hier hier weg, weil es aus einem Tisch kommt, anstatt aus Dual ausgewählt zu werden. Nehmen wir also an, dass die CTE -Abschnitte in der Tat eine einfache Abfrage aus einer Tabelle ist, so etwas wie:

SELECT Section, StartUnit, EndUnit FROM SectionData WHERE CallerID = 7

Und die ursprüngliche Frage steht noch.

War es hilfreich?

Lösung

Versuche dies:

WITH Sections AS (
   SELECT 1 Section, 1 StartUnit, 5 EndUnit FROM DUAL
   UNION ALL SELECT 2, 0, 2 FROM DUAL
   UNION ALL SELECT 3, 1, 1 FROM DUAL
), 
Numbers AS (
   SELECT ROWNUM-1 n
   FROM   DUAL
   CONNECT BY LEVEL < 1000
)
select section, n
from sections, numbers
where n between startunit and endunit
order by section, n;

Möglicherweise möchten Sie den Wert von 1000, den ich verwendet habe, einstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top