■ NVLやISNULLに相当するParadoxのコマンドは?

[Delphi Q & A 掲示板] [過去ログの一覧]


小豚丸 [E-Mail] 2009/03/15(日) 22:11:55 <中級者>
NVLやISNULLに相当するParadoxのSQLの書き方は
ご存知の方教えてください。

HOta 2009/03/16(月) 09:33:25
NVLはANSI標準にはありませんが、NULLはWhere句で使えます。

小豚丸 [E-Mail] 2009/03/16(月) 17:22:26
質問はあいまい過ぎて、すみません。

やりたいことは
Select SUM( NVL(D."支払", 0) )from "Detail" as D Where ....

そのうち、支払がNullの場合0としてSumに計算させたいということ
です。

よろしくお願いします。

HOta 2009/03/17(火) 08:45:40
Paradoxの場合、値がNULLの場合、0で計算します。
Selectの結果でFieldの値がNullの場合は、0でどうでしょうか?

小豚丸 2009/03/17(火) 15:05:12
実際に以下の文で実行したら、

select D."取引先Code", D."外部Code", D."発生年", D."発生月", 
Sum(D."発生") , Sum(D."支払"), Sum(D."発生")-Sum(D."支払" )
from "detail.db" as D
group by D."取引先Code", D."外部Code", D."発生年", D."発生月"

Sum(D."支払")の値が空欄になり、発生−支払の計算が合わなくなって
います。そこで、DBに支払FieldのNullを0で埋めたら、計算が
正しくなります。ですので、NVLをやりたかったわけです。

HOta 2009/03/18(水) 10:24:02
>select D."取引先Code", D."外部Code", D."発生年", D."発生月", 
>Sum(D."発生") , Sum(D."支払"), Sum(D."発生")-Sum(D."支払" )
>from "detail.db" as D
>group by D."取引先Code", D."外部Code", D."発生年", D."発生月"

select
   D."取引先Code"
 , D."外部Code"
 , D."発生年"
 , D."発生月"
 , Sum(D."発生") as Hassei
 , Sum(D."支払") as Siharai
from "detail.db" as D
group by D."取引先Code", D."外部Code", D."発生年", D."発生月"
に変えて、TQueryにSum(D."発生")-Sum(D."支払" )の替わりに計算項目"zangaku"をTCurrencyを作ります。
OnCulcFieldsイベントで、合計金額が空欄でなければ、zangakuに足します。
無ければ0になります。
  DataSet.FieldByName('zangaku').ascurrency := 0;
  if not DataSet.FieldByName('Hassei').isNull then
     DataSet.FieldByName('zangaku').ascurrency := 
         DataSet.FieldByName('Hassei').ascurrency;
  if not DataSet.FieldByName('Siharai').isNull then
     DataSet.FieldByName('zangaku').ascurrency := 
        DataSet.FieldByName('zangaku').ascurrency -
        DataSet.FieldByName('Siharai').ascurrency;

小豚丸 2009/03/18(水) 23:44:12
Hotaさんの案はどうもありがとうございます。
ただし、どうしても一発でSQL文でできないのが
気がすまないが、SQL文でのやり方が知りたかった。

佐助 2009/03/19(木) 07:40:15
接続環境がわかりませんが、
BDEには相当する機能がないようですね。
スマートじゃないけどCASTすれば可能です。
SUM(CAST('0' + CAST(支払 AS CHAR(10)) AS FLOAT))

ADO(dbGo)であれば
SUM(IIF(ISNULL(支払),0,支払)) でできると思います。

小豚丸 2009/03/19(木) 09:08:45
[[解決]]

佐助さん、ありがとうございました。
以下のようにCASTを使用してできました。感謝!

Select 
D."取引先Code", D."外部Code", D."発生年", D."発生月", 
Sum( CAST('0' + D."発生" As Float) ) As 発生,
Sum( CAST('0' + D."支払" As Float) ) As 支払,
From "detail.db" as D
Group by D."取引先Code", D."外部Code", D."発生年", D."発生月"

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library