kalkulator pól kilka warunków - Wersja do druku +- Forum QGIS (http://forum.quantum-gis.pl) +-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html) +--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html) +--- Wątek: kalkulator pól kilka warunków (/thread-1156.html)
1
2
|
kalkulator pól kilka warunków - Magda - 17-12-2014 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. RE: kalkulator pól kilka warunków - martel - 17-12-2014 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. RE: kalkulator pól kilka warunków - martel - 17-12-2014 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 RE: kalkulator pól kilka warunków - Magda - 18-12-2014 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 RE: kalkulator pól kilka warunków - randyX - 18-12-2014 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 Pozdrawiam RE: kalkulator pól kilka warunków - martel - 18-12-2014 "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. RE: kalkulator pól kilka warunków - randyX - 18-12-2014 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ę. RE: kalkulator pól kilka warunków - martel - 18-12-2014 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 RE: kalkulator pól kilka warunków - popej - 19-12-2014 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 RE: kalkulator pól kilka warunków - martel - 19-12-2014 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. |