Discussion:
SELECT CASE pod SQL ACCESS
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
m***@poczta.onet.pl
2006-11-07 15:29:06 UTC
Permalink
W jaki sposób zrealizować pod ACCESSEM następujące zapytanie SQL zawierające
instrukcje SELECT CASE..?? Wiadomo że SQL ACCESSA nie ma takiej instrukcji. Ma
ktos jakiś pomysł w jaki sposób obejść to ograniczenie...??

SELECT CASE WHEN (ID_PROD=1) THEN 'Nazwa1' WHEN (ID_PROD=12) THEN 'Nazwa2'
WHEN (ID_PROD=40 AND is_up*is_ninst=1) THEN 'Nazwa3' WHEN (ID_PROD=87 OR
ID_PROD=79 OR ID_PROD=91 ) THEN 'Nazwa4 WHEN ...itd....... END AS PRODUKT
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Tomasz Kiełpiński
2006-11-07 15:44:02 UTC
Permalink
Post by m***@poczta.onet.pl
W jaki sposób zrealizować pod ACCESSEM następujące zapytanie SQL zawierające
instrukcje SELECT CASE..?? Wiadomo że SQL ACCESSA nie ma takiej
instrukcji. Ma ktos jakiś pomysł w jaki sposób obejść to
ograniczenie...?? SELECT CASE WHEN (ID_PROD=1) THEN 'Nazwa1' WHEN
(ID_PROD=12) THEN 'Nazwa2' WHEN (ID_PROD=40 AND is_up*is_ninst=1) THEN
'Nazwa3' WHEN (ID_PROD=87 OR ID_PROD=79 OR ID_PROD=91 ) THEN 'Nazwa4
WHEN ...itd....... END AS PRODUKT
Zbudować string w VBA?

Pozdrawiam,
Kiełpiś
--
Bzdrężyło. Szłapy maślizgajne Tomasz Kiełpiński
Bujowierciły w gargazonach a.k.a. "Kiełpiś"
Tubylerczykom spełły fajle, Odpowiadając prywatnie,
Humpel wyświchnął ponad usuń: FALSZYWY z adresu
Krzysztof Pozorek
2006-11-07 16:10:01 UTC
Permalink
(...)
Post by m***@poczta.onet.pl
W jaki sposób zrealizować pod ACCESSEM następujące zapytanie SQL zawierające
instrukcje SELECT CASE..?? Wiadomo że SQL ACCESSA nie ma takiej instrukcji. Ma
ktos jakiś pomysł w jaki sposób obejść to ograniczenie...??
SELECT CASE WHEN (ID_PROD=1) THEN 'Nazwa1' WHEN (ID_PROD=12) THEN 'Nazwa2'
WHEN (ID_PROD=40 AND is_up*is_ninst=1) THEN 'Nazwa3' WHEN (ID_PROD=87 OR
ID_PROD=79 OR ID_PROD=91 ) THEN 'Nazwa4 WHEN ...itd....... END AS PRODUKT
W Accessie mozna np tak:
SELECT
IIF(ID_PROD=1,"Nazwa1",
IIF(ID_PROD=2,"Nazwa2",
IIF(ID_PROD=3,"Nazwa3",
IIF(itd...)
))) As Produkt

K.P.
Krzysztof Naworyta
2006-11-07 16:08:18 UTC
Permalink
Użytkownik <***@poczta.onet.pl> napisał

|W jaki sposób zrealizować pod ACCESSEM następujące zapytanie SQL
zawierające
| instrukcje SELECT CASE..?? Wiadomo że SQL ACCESSA nie ma takiej
instrukcji. Ma
| ktos jakiś pomysł w jaki sposób obejść to ograniczenie...??
|
| SELECT CASE WHEN (ID_PROD=1) THEN 'Nazwa1' WHEN (ID_PROD=12) THEN
'Nazwa2'
| WHEN (ID_PROD=40 AND is_up*is_ninst=1) THEN 'Nazwa3' WHEN (ID_PROD=87
OR
| ID_PROD=79 OR ID_PROD=91 ) THEN 'Nazwa4 WHEN ...itd....... END AS
PRODUKT

masz 3 takie funkcje w accessie:
iif()
switch()
choose()

w tym konkretnym przypadku najlepsza wydaje się switch()


SELECT
Switch(ID_PROD=1,'Nazwa1',
ID_PROD=12,'Nazwa2',
ID_PROD=40 AND is_up*is_ninst=1,'Nazwa3',
ID_PROD=87 OR ID_PROD=79 OR ID_PROD=91,'Nazwa4,
...
) as PRODUKT,
...
From
...

Ponieważ funkcja kończy wykonywanie po napodkaniu pierwszego poprawnego
warunku, więc możesz rozbudować ją o "ELSE" w ten sposób:

Switch(warunek1,wartość1, warunek2,wartość2, ..., True, wartość_else)
^^^^^^^^^^^^^^^^^^

--
KN
RafalK
2006-11-07 16:16:21 UTC
Permalink
w miejsce CASE w Accesie uzyj funkcji IIf(expr, truepart, falsepart)
Post by m***@poczta.onet.pl
W jaki sposób zrealizować pod ACCESSEM następujące zapytanie SQL zawierające
instrukcje SELECT CASE..?? Wiadomo że SQL ACCESSA nie ma takiej instrukcji. Ma
ktos jakiś pomysł w jaki sposób obejść to ograniczenie...??
SELECT CASE WHEN (ID_PROD=1) THEN 'Nazwa1' WHEN (ID_PROD=12) THEN 'Nazwa2'
WHEN (ID_PROD=40 AND is_up*is_ninst=1) THEN 'Nazwa3' WHEN (ID_PROD=87 OR
ID_PROD=79 OR ID_PROD=91 ) THEN 'Nazwa4 WHEN ...itd....... END AS PRODUKT
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Loading...