17-12-2014, 13:28,
|
|
Magda
już zapościła(e)m
|
Liczba postów: 9
3
Dołączył: 22-01-2011
Reputacja:
0
|
|
kalkulator pól kilka warunków
Witam , mam problem z poprawnym i działającym zapisaniem warunku złożonego
Próbowałam tak:
( "ludn_liczb" <30000 )* 2
(30000< "ludn_liczb" <60000 )* 3
(60000< "ludn_liczb" <90000 )* 4
(90000< "ludn_liczb" <120000 )* 5
i tak:
( "ludn_liczb" <30000 )* 2
( "ludn_liczb" >30000 AND "ludn_liczb" <60000)* 3
itd.
i tak:
CASE WHEN "ludn_liczb" <30000 THEN 2 END
itd.
łącząc wyrażeniem AND , + , nie dając żadnego łącznika. Działa tylko po wpisaniu pierwszego warunku, jak dodam kolejny warunek to nie działa.
Będę wdzięczna za pomoc.
|
|
17-12-2014, 17:59,
|
|
martel
geofomaniak
|
Liczba postów: 96
9
Dołączył: 18-06-2010
Reputacja:
1
|
|
RE: kalkulator pól kilka warunków
Też nie udało mi się znaleźć sposobu na połączenie iluś warunków w jeden ciąg wykonywalny, możesz ewentualnie aktualizować to samo pole kilka razy przy użyciu kalkulatora pól dla poszczególnych warunków, wpisywania w sumie tyle samo co jedna długa formuła I tak dla pierwszego przypadku będzie:
CASE WHEN "ludn_liczb" < 30000 THEN "ludn_liczb"*2 END
I potem analogicznie:
CASE WHEN "ludn_liczb" > 30000 AND "ludn_liczb" <60000 THEN "ludn_liczb"*3 END
itd.
|
|
17-12-2014, 19:08,
(Ten post był ostatnio modyfikowany: 17-12-2014, 19:17 {2} przez martel.)
|
|
martel
geofomaniak
|
Liczba postów: 96
9
Dołączył: 18-06-2010
Reputacja:
1
|
|
RE: kalkulator pól kilka warunków
Ok, errata, jednak da się to zrobić jednym wyrażeniem i powinno być ok jak wpiszesz tak:
case when "ludn_liczb" <30000 then "ludn_liczb"*2 when "ludn_liczb" <60000 then "ludn_liczb"*3 when "ludn_liczb" <90000 then "ludn_liczb"*4 (itd. w zależności od liczby przedziałów) end
|
|
18-12-2014, 09:42,
|
|
Magda
już zapościła(e)m
|
Liczba postów: 9
3
Dołączył: 22-01-2011
Reputacja:
0
|
|
RE: kalkulator pól kilka warunków
Dziękuję za pomoc, faktycznie spełnia kilka warunków ale coś jest nie tak ponieważ
jako wynik pojawiają się liczby 12, 9 i 4 zamiast 2,3 i 4.
Zachodzi sprzeczność ponieważ liczba np. 10000 spełnia wszystkie warunki tzn. jest zarówno ,30000 jak i <60000 jak i ,90000. Trzeba jakoś zastosować przedziały :
"ludn_liczb" <30000
30000 < "ludn_liczb" <60000
60000 < "ludn_liczb" <90000
|
|
18-12-2014, 11:00,
|
|
randyX
geofon
|
Liczba postów: 32
6
Dołączył: 23-01-2013
Reputacja:
0
|
|
RE: kalkulator pól kilka warunków
Witam,
W tym wypadku zadziała wielokrotna kombinacja warto by było pomyśleć o odpowiednim domykaniu przedziałów (np. <= zamiast < itp.) bo przy wartości równej 30000 - wynik będzie zerowy
Kod: case when "ludn_liczb" <30000 then "ludn_liczb"*2 else
(case when "ludn_liczb" <60000 and "ludn_liczb" > 30000 then "ludn_liczb"*3 else
(case when "ludn_liczb" <90000 and "ludn_liczb" > 60000 then "ludn_liczb"*4 else
(case when "ludn_liczb" > 90000 and "ludn_liczb" < 120000 then "ludn_liczb"*5 end)end)end)end
Pozdrawiam
|
|
18-12-2014, 12:08,
(Ten post był ostatnio modyfikowany: 18-12-2014, 12:14 {2} przez martel.)
|
|
martel
geofomaniak
|
Liczba postów: 96
9
Dołączył: 18-06-2010
Reputacja:
1
|
|
RE: kalkulator pól kilka warunków
"Dziękuję za pomoc, faktycznie spełnia kilka warunków ale coś jest nie tak ponieważ
jako wynik pojawiają się liczby 12, 9 i 4 zamiast 2,3 i 4"
Zachodzi sprzeczność ponieważ liczba np. 10000 spełnia wszystkie warunki tzn. jest zarówno ,30000 jak i <60000 jak i ,90000. Trzeba jakoś zastosować przedziały"
Nie zachodzi sprzeczność, bo warunki się nawzajem wykluczają i powiedzmy przykładowe 10000 spełniając pierwszy warunek nie będzie już brane pod uwagę w drugim jak i każdym kolejnym warunku.
"W tym wypadku zadziała wielokrotna kombinacja warto by było pomyśleć o odpowiednim domykaniu przedziałów (np. <= zamiast < itp.) bo przy wartości równej 30000 - wynik będzie zerowy"
Nie będzie zerowy, gdyż wtedy 30000 łapie się do drugiego przedziału, zamiana < na <= spowoduje tylko, iż wtedy 30000 będzie jeszcze w pierwszym przedziale zamiast w drugim. Jedyne co nie może być, to dwa domknięcia ze znakiem równości, czyli np. <=30000 i w następnym >=30000.
|
|
18-12-2014, 14:30,
|
|
randyX
geofon
|
Liczba postów: 32
6
Dołączył: 23-01-2013
Reputacja:
0
|
|
RE: kalkulator pól kilka warunków
Niestety - dwa domknięcia spowodują error.
W tej sytuacji nie może coś przynależeć jednocześnie do dwóch przedziałów- musi przynależeć albo do pierwszego albo do drugiego:
1 - ludn<= 30000 , 2 - 60000>= ludn > 30000 (oczywiście czy to ma być do 1 czy do 2 przedziału łatwo zamienić)
Dlatego też jedynie jednostronne znaki wieksze/mniejsze bądź równe wchodzą w grę.
|
|
18-12-2014, 15:14,
|
|
martel
geofomaniak
|
Liczba postów: 96
9
Dołączył: 18-06-2010
Reputacja:
1
|
|
RE: kalkulator pól kilka warunków
No oczywiście, że jak jedna wartość będzie należeć do dwóch zbiorów bądź do żadnego, to będzie błąd, to chyba logiczne, jednak w formule, którą podałem:
ludn <30000, <60000, <90000
błędu nie ma, można ten znak zamienić na <= celem przesunięcia granic przedziału o 1, ewentualnie ostatnią wartość trzeba by zmienić jakby chcieć: <90000 i ostatni >=90000
|
|
19-12-2014, 00:11,
|
|
popej
już zapościła(e)m
|
Liczba postów: 5
0
Dołączył: 16-11-2014
Reputacja:
0
|
|
RE: kalkulator pól kilka warunków
Cześć,
nie potrafię zgadnąć, jaki powinien być wynik tej operacji, ale np. zakładając, że to mają być liczby 2..5, to można spróbować tak:
Kod: case
when "ludn_liczb" < 30000 then 2
when "ludn_liczb" < 60000 then 3
when "ludn_liczb" < 90000 then 4
else 5
end
|
|
19-12-2014, 00:40,
|
|
martel
geofomaniak
|
Liczba postów: 96
9
Dołączył: 18-06-2010
Reputacja:
1
|
|
RE: kalkulator pól kilka warunków
Wynikiem ma być iloczyn wartości pola (w tym przypadku liczba ludności) i podanego współczynnika przy spełnieniu określonego warunku (gdy liczba ludności zawiera się w danym przedziale), dlatego po "then" trzeba powtórzyć "ludn_liczb" * (i tu wpisać współczynnik). Składnia podana wcześniej:
case when "ludn_liczb" <30000 then "ludn_liczb"*2 when "ludn_liczb" <60000 then "ludn_liczb"*3 when "ludn_liczb" <90000 then "ludn_liczb"*4 (itd. w zależności od liczby przedziałów) end
działa dobrze.
|
|
|