2016-12-12 3 views
0

ich eine Abfrage leite die für mich einen Blick schafft mit folgenden DetailsPostgresql Abfrage das Array in Reihen spalten

id  name  brand_id 
1  E1   {3,4} 
2  E2   {5,7,8} 
3  E4   {1} 

Ich mag die Datensätze für brand_id in gleiche Anzahl von Zeilen aufgeteilt. Daher sollte die obige Ansicht wie folgt aussehen:

id  name  brand_id 
1  E1   {3} 
1  E1   {4} 
2  E2   {5} 
2  E2   {7} 
2  E2   {8} 
3  E4   {1} 

Hierher die brand_id aus einer Unterabfrage durch Anpassung der Erstellungsdatum des Datensatzes mit dem Datum der Marke

SQL Query berechnet:

CREATE OR REPLACE VIEW %I AS 
    SELECT row_number() over(), 
    id, 
    name,    
    (select array(select id 
        from brand b 
        where status = true and (i.creation_date = b.creation_date) 
        order by b asc)) as brand_id 
    FROM events i 
    group by id order by id 

Antwort

1

Am einfachsten ist es wahrscheinlich:

CREATE VIEW some_name AS 
    SELECT i.id, i.name, b.id AS brand_id 
    FROM events i 
    JOIN brand b USING (creation_date) 
    WHERE b.status 
    ORDER BY 1; 
+0

Haben Sie 'b.status = true' vermisst? –

+0

@wingedpanther 'status' ist offensichtlich ein' boolean', so dass nur der Spaltenname ausreicht. Die 'WHERE'-Klausel benötigt einen Ausdruck, der zu einem booleschen Wert führt, eine boolesche Spalte reicht aus. – Patrick

+0

Ich wusste das nicht, Wie peinlich !! –

0
select id, name, unnest(brand_id) from events; 
0

Bitte verwenden Sie die folgende Abfrage, um Daten zu extrahieren.

select id 
     ,name 
     ,'{'||replace(replace(regexp_split_to_table(brand_id, E','),'}',''),'{','')||'}' 
from umang.t_st_ques 
order by 1,2,3; 
Verwandte Themen