1

Ich versuche, einige Ergebnisse wie folgt zu erhalten:Postgres - Wählen Sie rownumber ohne Tisch aber Daten aus einer Funktion

rownumber | value 
    1  | a 
    2  | b 
    3  | c 

Ohne Tabellen Ich bin so etwas wie dies zu tun:

WITH RECURSIVE t(rownumber, value) AS (
select 1, regexp_split_to_table('a, b, c', ',') 
UNION ALL 
SELECT rownumber+1, regexp_split_to_table('a, b, c',',') FROM t 
) 
SELECT * FROM t limit (select count(*) from regexp_split_to_table('a, b, c', ',')); 

Aber die Ergebnisse sind nicht wie erwartet.

Der Grund, warum ich das tue, ist, weil der Wert 'a, b, c' eine Variable sein sollte.

In Oracle sucht der SQL wie folgt aus:

SELECT value FROM (
     SELECT ROWNUM AS rownumber, trim(REGEXP_SUBSTR('a, b, c','[^,]+', 1, LEVEL)) AS value 
     FROM DUAL CONNECT BY trim(REGEXP_SUBSTR('a, b, c', '[^,]+', 1, LEVEL)) IS NOT NULL 
    ) 

und es funktioniert.

Was mache ich falsch in Postgresql?

Antwort

0

Dies geschieht, weil regexp_split_to_table eine Tabelle und nicht einen einzelnen Wert für jede Zeilennummer zurückgibt.

Vielleicht funktioniert ein anderer Ansatz? Zum Beispiel gibt mir dies die Ausgabe, die Sie nach waren:

SELECT regexp_split_to_table('a,b,c', ',') as value, 
     rank() over(order by regexp_split_to_table('a,b,c', ',')) as rownumber 

EDIT: Die oben wird die Ergebnisse neu ordnen, die möglicherweise nicht, was Sie wollen. Das Folgende wird die Bestellung erhalten:

WITH T as 
(
SELECT regexp_split_to_table('d,a,b,c', ',') as value 
) 

SELECT row_number() over() as rownumber, 
     value 

FROM t 
+0

Vielen Dank, das hat für mich funktioniert! Ich habe gerade einen outter select hinzugefügt, weil ich nach der rownumber aus der Tabelle filtern musste wie '' value from ([Ihre untere Abfrage]) als Tabelle, wo rownumber = [my_number] ' –

+0

Keine Sorge, Kumpel. Schön, dass Sie alle sortiert sind =). – kaisquared