Portál AbcLinuxu, 25. dubna 2024 00:54


Dotaz: Oracle 11g rowToColumn/LISTAGG

6.4.2017 08:01 chucky
Oracle 11g rowToColumn/LISTAGG
Přečteno: 1390×
Odpovědět | Admin
Moze mi niekto nazorne ukazat SQL prikaz s vyuzitim LISTAGG? Mam
SELECT
  col1,
  col2,
  ...
  coln,
  SELECT a where b > c from TAB2
FROM TAB1;
, kde vysledkom vnoreneho selectu moze byt viacero riadkov, teda napr.:
+------+
| val1 |
| val2 |
| ...  |
| valn |
+------+
Ja potrebujem tieto riadky dostat do jednej stlpca, takze vysledok celeho selectu bude takyto:
+-----------------------------------------------+
| col1 | col2 | ... | coln | a                  |
| ...  | ...  | ... | ...  | val1,val2,...,valn |
+-----------------------------------------------+
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.4.2017 09:47 jekub
Rozbalit Rozbalit vše Re: Oracle 11g rowToColumn/LISTAGG
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vas priklad mi prijde nesmyslny, nejspis chcete neco jineho. Mozna nejake spojeni tab1, tab2 a listagg podle group by. Nicmene ptal jste se na tohle:

drop table tab1;
create table tab1(
    col1 varchar2(10),
    col2 varchar2(10),
    col3 varchar2(10)
);
insert into tab1 values('col1','col2','col3');
commit;

drop table tab2;
create table tab2(
    val varchar2(10)
);
insert into tab2 values('val1');
insert into tab2 values('val2');
insert into tab2 values('val3');
commit;

select tab1.*,(select listagg(val,',') within group (order by val) from tab2) from tab1;
6.4.2017 15:48 gnat
Rozbalit Rozbalit vše Re: Oracle 11g rowToColumn/LISTAGG
Odpovědět | | Sbalit | Link | Blokovat | Admin
LISTAGG zagreguje sloupec z více řádek do jednoho stringu, transormaci řádků do sloupců umí např. analytická funkce LAG
13.4.2017 10:02 Daniel
Rozbalit Rozbalit vše Re: Oracle 11g rowToColumn/LISTAGG
Ale kdeže, LAG dělá něco úplně jiného. A sice, že v množině seřazené podle nějakých klíčů - tohle řazení je ale nezávislé na order by výsledné množiny záznamů - vypočítá hodnotu sloupce jako hodnotu zadaného sloupce z předešlého řádku, volitelně jak moc předešlý, defaulně 1. Pro víc detailů nastudujte analytické funkce
6.4.2017 18:40 Ivan
Rozbalit Rozbalit vše Re: Oracle 11g rowToColumn/LISTAGG
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud jde o prevod z radek na sloupce a naopak, tak k tomu slouzi klazule PIVOT (popr. PIVOT XML) a UNPIVOT. Pokud chces vice hodnot v jednom policku tabulky tak pouzij LISTAGG popr. XMLAGG.

PS: mel bys' jeste zapracovat na zadani. Ocekavany vystupni format neni uplne jednoznacny.

8.5.2017 00:44 citanus | skóre: 12 | Cork (Ireland)
Rozbalit Rozbalit vše Re: Oracle 11g rowToColumn/LISTAGG
Odpovědět | | Sbalit | Link | Blokovat | Admin

CONCAT

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.