Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7全般 : Excel 2013)
WHERE 句にIIF文を使用できるか
投稿日時: 20/03/19 18:40:24
投稿者: HT

次のSQLを作りました。税区分がNULLの時は"1"として、税区分が"1"のものを選択して金額を集計するものです。質問は、「税区分が"1"のものを選択して」を、下記WHERE句で問題無いか です
 
SELECT IIF(税区分 IS NULL,1,税区分) AS 税区分1,SUM(金額) AS 金額計 FROM T情報 WHERE IIf(税区分 Is Null, 1, 税区分) = 1 GROUP BY IIF(税区分 IS NULL,1,税区分)

回答
投稿日時: 20/03/19 20:08:22
投稿者: simple

SELECT 1 AS 税区分1,SUM(金額) AS 金額計 FROM T情報 WHERE 1 = 1 GROUP BY 1
というのは動作するのですか?

回答
投稿日時: 20/03/19 22:11:25
投稿者: WinArrow
投稿者のウェブサイトに移動

HT さんの引用:
次のSQLを作りました。税区分がNULLの時は"1"として、税区分が"1"のものを選択して金額を集計するものです。質問は、「税区分が"1"のものを選択して」を、下記WHERE句で問題無いか です
 
SELECT IIF(税区分 IS NULL,1,税区分) AS 税区分1,SUM(金額) AS 金額計 FROM T情報 WHERE IIf(税区分 Is Null, 1, 税区分) = 1 GROUP BY IIF(税区分 IS NULL,1,税区分)

 
税区分=1を対象に金額を集計するのですから
 
SELECT IIF(税区分 IS NULL,1,税区分) AS 税区分1
>GROUP BY IIF(税区分 IS NULL,1,税区分)
必要ないと思います。
 
>HERE IIf(税区分 Is Null, 1, 税区分) = 1
は、問題ないでしょう。

投稿日時: 20/03/19 22:12:58
投稿者: HT

simpleさん ありがとうございます 税区分 IS NULL の時は税区分=1 そうでない時は税区分の値にて、
税区分ごとの金額を集計するのですが、複数の税区分の集計をもとめるのではなく、税区分=1となる場合
の集計をしたい というものです

回答
投稿日時: 20/03/19 22:25:58
投稿者: WinArrow
投稿者のウェブサイトに移動

HT さんの引用:
税区分=1となる場合
の集計をしたい というものです

 
これで、コードを記述すると
SELECT SUM(金額) AS 金額計 FROM T情報 WHERE IIf(税区分 Is Null, 1, 税区分) = 1

となります。
(再掲)

回答
投稿日時: 20/03/20 00:21:25
投稿者: MMYS

やりたいことが分かりません。
SQLから意図を読み取ると
・Nullの時は1に置き換える
・それを集計
・ただし、1だけを抽出。
と読み取れる。この意図なら
サブクエリでNULLを1に置き換え
それを元に集計。
 

SELECT
  税区分1
 ,SUM(金額) AS 金額計 
FROM
  (SELECT IIF(税区分 IS NULL,1,税区分) AS 税区分1
         ,金額
   FROM T情報)
WHERE 税区分1=1
GROUP BY 税区分1;

しかしながら
HT さんの引用:
税区分=1となる場合の集計をしたい というものです

とあります。
税区分=1とはもともとNullだから
 税区分=NULL
を集計をしたい。と読み取れます。
 
SELECT
   税区分
  ,Sum(金額) AS 合計額
FROM  T情報
WHERE 税区分 Is Null
GROUP BY 税区分

 
他の方も指摘してますが、
 IIf(税区分 Is Null, 1, 税区分)
の実行結果は
 1 と 1以外
が出てくる。
その上で1以外は除外。
結果、1 だけが残る。
 
IIfを使う意図はなんてすか。
 
 

回答
投稿日時: 20/03/20 10:05:08
投稿者: WinArrow
投稿者のウェブサイトに移動

IIF関数を使わない方法
 
    SQL = "SELECT SUM(金額) AS 金額計 FROM T情報 WHERE 税区分 IS NULL OR 税区分=1"

投稿日時: 20/03/21 08:45:53
投稿者: HT

ご教授ありがとうございます MMYSさんのご指摘「IIfを使う意図はなんてすか」について
複数の税区分値が読み込まれるクウェリの中で、ご教授いただいているクウェリを実行します
ですから、税区分=1に限定したものではありません 上位のクウェリでの税区分値に応じて
下位のクウェリでその税区分値で集計したものを求めます

回答
投稿日時: 20/03/21 10:19:30
投稿者: WinArrow
投稿者のウェブサイトに移動

HT さんの引用:
ご教授ありがとうございます MMYSさんのご指摘「IIfを使う意図はなんてすか」について
複数の税区分値が読み込まれるクウェリの中で、ご教授いただいているクウェリを実行します
ですから、税区分=1に限定したものではありません 上位のクウェリでの税区分値に応じて
下位のクウェリでその税区分値で集計したものを求めます

 
>上位の〜〜〜
後半は、今回の問題には、まったく関係のないことでしょう。
 
>複数の税区分値が読み込まれるクウェリの中
は、まだ、読み込んでいないから
「複数の税区分値があるデータの中から」
と表現するのが妥当ではないでしょうか?
 
>ですから、税区分=1に限定したものではありません
今回のクエリでは、「税区分:NULL と 税区分=1 を対象に金額を集計するものです。」
と表現する方がわかりやすいです。
 
条件である対象エータを抽出方法として
指定方法はいくつかあります。
(1)IIF関数を使う方法・・・・・NULLの場合、1に読み替える方法
(2)税区分 IS NULL OR 税区分=1 のように「OR」で判定する方法
 

トピックに返信