フィールド計算機の条件分岐処理について

508 views
Skip to first unread message

funfun

unread,
Sep 22, 2023, 6:27:52 AM9/22/23
to QGIS初心者質問グループ
フィールド計算機の条件分岐処理について質問です。

M列目のフィールド項目に全国の市町村名が格納されていて、
そのフィールド項目に対し条件(例えば札幌市)が一部マッチした場合、
N列目のフィールドに整数値を入力したいことを考えています。
条件は複数あります。

<既存フィールド更新>
case
when "N01_003" like '札幌市' then 10
end

イメージとして上記のような式かなと思ったのですが、
うまくいきません。
ご助言頂けますと幸いです。
 

futoshi kidani

unread,
Sep 22, 2023, 8:35:36 AM9/22/23
to QGIS初心者質問グループ
フィールド計算機の右側に、関数等を選ぶところがあるのですが、
そこの例を見てみると、case等は大文字でないと駄目なようです。
「条件」の中にCASE文がありますので、クリックしてエディタに代入して編集されるといいかと思います。

それ以外だと、整数値を入れるところがブール値など合致しない型になっているとかでしょうか?

2023年9月22日金曜日 19:27:52 UTC+9 funfun:

キタ

unread,
Sep 22, 2023, 9:06:50 AM9/22/23
to QGIS初心者質問グループ
こんにちは

条件式にあいまい処理のLikeを使う場合は、ワイルドカード「%」が必要です。
「札幌市」を含むデータを抽出したい場合は「'%札幌市%'」とすると、「札幌市」が含まれるデータが対象となります。
「札幌市」からはじまるデータを抽出したい場合は「'札幌市%'」とすると、「札幌市」から始まるデータが対象となります。


2023年9月22日金曜日 19:27:52 UTC+9 funfun:
フィールド計算機の条件分岐処理について質問です。

funfun

unread,
Sep 24, 2023, 10:22:03 PM9/24/23
to QGIS初心者質問グループ
kidani様、キタ様

早速ご回答頂きましてありがとうございます。

現状、下記のように条件処理を行っています。
■選択中の1個の地物のみ更新のチェックを外す
■既存のフィールドを更新(更新したいフィールドをプルダウンで選択)

CASE
WHEN 1 = 1 then 10
WHEN  "N03_004" like '%札幌市%' then 12
WHEN  "N03_004" like '%小樽市%' then 11
WHEN  "N03_004" like '%網走市%' then 13
END

最初の「WHEN 1 = 1 then 10」は、テーブル全体をまず10で初期化(これは処理されています)
"N03_004"には、札幌市中央区、札幌市●●区、函館市、小樽市、礼文町・・・・など、全国の市区町村名が格納されていて、
それぞれの地区町村に合致した値で10を更新したいのですが、
現状は初期化の10だけ反映されて、札幌市などを12で更新することができていません。
構文自体が間違いなのでしょうか。
ご教示頂けますと幸いです。

2023年9月22日金曜日 22:06:50 UTC+9 キタ:

キタ

unread,
Sep 24, 2023, 10:30:00 PM9/24/23
to QGIS初心者質問グループ
こんにちは

case関数は1つの条件合致するとそれで処理は終了です。
すべてのレコードか、「1=1」でTRUEになるので、その処理のみ実行されます。

今回の場合は、条件に合わないものは「10」を入力したいので、

CASE
WHEN "N03_004" like '%札幌市%' then 12
WHEN "N03_004" like '%小樽市%' then 11
WHEN "N03_004" like '%網走市%' then 13
else 10
END

となります
どうしてもはじめにすべて10を入力したいのであれば、別処理で10を入力してから、CASE関数を実行します。

キタ

2023年9月25日月曜日 11:22:03 UTC+9 funfun:

funfun

unread,
Sep 26, 2023, 5:53:29 AM9/26/23
to QGIS初心者質問グループ
キタ様

返信が遅くなりまして失礼いたしました。
ご教示の内容で無事、テーブル更新が出来ました。
ありがとうございました。

funfun

2023年9月25日月曜日 11:30:00 UTC+9 キタ:
Reply all
Reply to author
Forward
0 new messages