ďťż
 
zapytanie w Oracle 9i ďťż
 
zapytanie w Oracle 9i
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

zapytanie w Oracle 9i



Michał Sienkiewicz - 21-12-2005 12:16
zapytanie w Oracle 9i
  Witam,

Mam następującą tabelę (kolumny):
ID
NAME
QUANTITY

Potrzebuję napisać zapytanie, które powinno zwracać wiersze zdublowane tyle
razy ile wynosi wartość QUANTITY
Czyli przykładowo, jeżeli tabela zawiera wiersze:
ID NAME QUANTITY
1 test 3
2 test2 1

powinienem otrzymać rezultat:
1 test
1 test
1 test
2 test2

Jak napisać takie zapytanie w Oracle 9i.

Pozdrawiam,
Michał Sienkiewicz





Marcin - 27-12-2005 10:16

  Michał Sienkiewicz wrote:
> Mam następującą tabelę (kolumny):
> ID
> NAME
> QUANTITY
>
> Potrzebuję napisać zapytanie, które powinno zwracać wiersze zdublowane tyle
> razy ile wynosi wartość QUANTITY
> Czyli przykładowo, jeżeli tabela zawiera wiersze:
> ID NAME QUANTITY
> 1 test 3
> 2 test2 1
>
> powinienem otrzymać rezultat:
> 1 test
> 1 test
> 1 test
> 2 test2
>

Za pomocą zapytania SQL z jednej tabeli chyba się nie da.
Możesz utworzyć pomocniczą tabelkę z kolejnymi liczbami
z jakiegoś zakresu i połączyć z nią wynik:

tabelka lp(qty):
1
2
3
4
....

SELECT id, name FROM tabela JOIN lp ON lp.qty <= tabela.qty;

albo dynamicznie tworzyć zapytanie w procedurze.

M.




Michał Sienkiewicz - 27-12-2005 10:16

  > Michał Sienkiewicz wrote:
>> Mam następującą tabelę (kolumny):
>> ID
>> NAME
>> QUANTITY
>>
>> Potrzebuję napisać zapytanie, które powinno zwracać wiersze zdublowane
>> tyle
>> razy ile wynosi wartość QUANTITY
>> Czyli przykładowo, jeżeli tabela zawiera wiersze:
>> ID NAME QUANTITY
>> 1 test 3
>> 2 test2 1
>>
>> powinienem otrzymać rezultat:
>> 1 test
>> 1 test
>> 1 test
>> 2 test2
>>
>
> Za pomocą zapytania SQL z jednej tabeli chyba się nie da.
> Możesz utworzyć pomocniczą tabelkę z kolejnymi liczbami
> z jakiegoś zakresu i połączyć z nią wynik:
>
> tabelka lp(qty):
> 1
> 2
> 3
> 4
Trochę mało eleganckie rozwiązanie szczególnie, że nie znam ograniczenia
quantity od góry.
A czy da się napisać zapytanie które wygeneruje mi taką sekwencję?
Wtedy mógłbym wykonać nastepujące zapytanie:

SELECT t.id, t.name FROM tabela t, (select num from sekwencja numerkow) tmp
where t.quantity >= tmp.num

> SELECT id, name FROM tabela JOIN lp ON lp.qty <= tabela.qty;
>
> albo dynamicznie tworzyć zapytanie w procedurze.
>




wk - 27-12-2005 10:16

  Użytkownik "Marcin" <spam@noaddress.xx> napisał w wiadomości
news:dobiur$8s$1@nemesis.news.tpi.pl...
> Michał Sienkiewicz wrote:
> > .....
> > Potrzebuję napisać zapytanie, które powinno zwracać wiersze
> > zdublowane tyle razy ile wynosi wartość QUANTITY
> >
>
> Za pomocą zapytania SQL z jednej tabeli chyba się nie da.
> Możesz utworzyć pomocniczą tabelkę z kolejnymi liczbami
> z jakiegoś zakresu i połączyć z nią wynik:

Zamiast pomocniczej tabeli można skorzystać z TABLE FUNCTION
(w połączeniu z typem)
- zaletą jest to że nie trzeba tworzyć tabeli i wypełniać jej wartościami
:)
- zaś wadą, że trzeba napisać funkcję z pragmą pipelined i utworzyć typ
Wybór należy do Ciebie

--
Wk





Michał Sienkiewicz - 27-12-2005 10:16

  >> > Potrzebuję napisać zapytanie, które powinno zwracać wiersze
>> > zdublowane tyle razy ile wynosi wartość QUANTITY
>> >
>>
>> Za pomocą zapytania SQL z jednej tabeli chyba się nie da.
>> Możesz utworzyć pomocniczą tabelkę z kolejnymi liczbami
>> z jakiegoś zakresu i połączyć z nią wynik:
>
> Zamiast pomocniczej tabeli można skorzystać z TABLE FUNCTION
> (w połączeniu z typem)
> - zaletą jest to że nie trzeba tworzyć tabeli i wypełniać jej wartościami
> :)
> - zaś wadą, że trzeba napisać funkcję z pragmą pipelined i utworzyć typ
> Wybór należy do Ciebie
Ok, już mam:
http://www.akadia.com/services/ora_pipe_functions.html




wk - 27-12-2005 10:16

 
Użytkownik "Michał Sienkiewicz" <msienkie_nospam@interia.pl> napisał w
wiadomości news:dobobk$2ne$1@atlantis.news.tpi.pl...
> Ok, już mam:
> http://www.akadia.com/services/ora_pipe_functions.html
>
i o to chodziło :)

--
Wk
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle 19g +Insert +Insert +Insert... [Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?= =?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?= [oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?= [oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?= MSSQL Express czy Oracle Express =?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?= =?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= =?iso-8859-2?q?[oracle_10g]_jak_da=E6_grant_do_gv$=2E=2E=2E=2E_=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shanti.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com