ďťż
 
if w zapytaniu select ďťż
 
if w zapytaniu select
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

if w zapytaniu select



Maciej Misiak - 13-11-2006 00:47
if w zapytaniu select
  Witam,
Czy jest możliwość użycia instrukcji warunkowej w zapytaniu select?
Chodzi mi o takie zagadnienie:

create table aaa
(
wsp1 numeric(7,2),
wsp2 numeric(7,2),
take_first boolean,
id_mnoznika integer references mnozniki
);

create table mnozniki
(
id serial primary key,
m1 numeric(7,2),
m2 numeric(7,2)
);

Wynik, który chcę uzyskać, to:
if(take_first)
return wsp1 * m1;
else
return wsp2 * m2;

Początek zapytania jest oczywisty:

SELECT m1, m2, wsp1, wsp2, take_first FROM aaa JOIN mnozniki ON
id_mnoznika = id where id = ...;

Rozszerzenie o obliczenia pośrednie również proste:

SELECT m1 * wsp1, m2 * wsp2, take_first FROM aaa JOIN mnozniki ON
id_mnoznika = id where id = ...;

I tu muszę użyć np. plsql aby zrobić ifa:
SELECT INTO tf take_first FROM aaa JOIN mnozniki ON id_mnoznika = id
where id = ...;
IF tf = true THEN
SELECT INTO ret_val m1 * wsp1 FROM aaa JOIN mnozniki ON id_mnoznika =
id where id = ...;
ELSE
SELECT INTO ret_val m2 * wsp2 FROM aaa JOIN mnozniki ON id_mnoznika =
id where id = ...;
END IF

Można to zrobić selectem?

--
grizzley





hubert depesz lubaczewski - 13-11-2006 00:47

  On 2006-11-05, Maciej Misiak <grizzley@poczta.onet.pl> wrote:
> Można to zrobić selectem?

jaka to baza danych?

depesz

--
mój boże, spraw abym milczał, dopóki się nie upewnię, że naprawdę mam
coś do powiedzenia. (c) 1998 depesz




Adam Buraczewski - 13-11-2006 00:47

  Maciej Misiak <grizzley@poczta.onet.pl> wrote:
> Czy jest możliwość użycia instrukcji warunkowej w zapytaniu select?

Nie napisałeś o jaką bazę danych chodzi, ale najwyraźniej chodzi Ci o
CASE. Składnia (z dokumentacji PostgreSQLa):

http://www.postgresql.org/docs/8.1/s...nditional.html

Polecam także inne konstrukcje SQL opisane w tym rozdziale.

Pozdrawiam!

--
Adam Buraczewski <adamb (at) nor (dot) pl> * Linux user #165585
GCS/TW d- s-:+>+:- a C+++(++++) UL++++$ P++ L++++ E++ W+ N++ o? K w--
O M- V- PS+ !PE Y PGP+ t+ 5 X+ R tv- b+ DI D G++ e+++>++++ h r+>++ y?




Wito - 13-11-2006 00:47

  Nie wiem czy to rozwiąże twój problem ale może tak. Gdybuś zrobił
to w 2 selectach połączonych UNION.
Każdy z nich zawierałby dodatkową kolumnę która zawierałaby wynik
działania.

Przykład:
SELECT A.wsp1, A.wsp2, A.take_first, A.id_mnozniki, [dodatkowa_kolumna]

FROM aaa A
WHERE
take_first is null
AND [dodatkowa_kolumna] = wsp1 * (select m1 from mnozniki where
id=A.idmnozniki)

UNION

SELECT A.wsp1, A.wsp2, A.take_first, A.id_mnozniki, [dodatkowa_kolumna]

FROM aaa A
WHERE
take_first is not null
AND [dodatkowa_kolumna] = wsp2 * (select m2 from mnozniki where
id=A.idmnozniki)

W ten sposób w [dodatkowej kolumnie] powinny znaleźć się
odpowiednie wartości w zależności od tego czy cos sie znajduje w
take_fisrt czy tez nie. Powyższe zapytanie nie było testowane!!!
Jeżeli chcesz je wykorzystać to powinieneś zrobić z tego widok
(jeżeli się da to zrobić)
Czy o to chodzilo?

Wito





Maciej Misiak - 13-11-2006 00:47

  > Maciej Misiak <grizzley@poczta.onet.pl> wrote:
> > Czy jest możliwość użycia instrukcji warunkowej w zapytaniu select?
>
> Nie napisałeś o jaką bazę danych chodzi, ale najwyraźniej chodzi Ci o
> CASE. Składnia (z dokumentacji PostgreSQLa):
>
> http://www.postgresql.org/docs/8.1/s...nditional.html
>
> Polecam także inne konstrukcje SQL opisane w tym rozdziale.

PostgreSQL, ale sądziłem, że to niezależne od bazy, więc rozmyślnie nie podałem.
CASE będzie odpowiedni, dzięki.

--
grizzley

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




Maciej Misiak - 13-11-2006 00:47

  > Nie wiem czy to rozwiąże twój problem ale może tak. Gdybuś zrobił
> to w 2 selectach połączonych UNION.
<...>
> Czy o to chodzilo?

Obecnie (czyli przy jednym if-ie) wystarczy mi zwykły CASE, ale niedługo natknę
się na zagnieżdżone warunki i wtedy UNION się przyda, dzięki.

--
grizzley

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= =?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?= [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?= [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?= [MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?= mecze sie i mecze i nic - zapytanie czesciowe
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • quentinho.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