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

解決


小豚丸  2009-03-16 07:11:55  No: 33666

NVLやISNULLに相当するParadoxのSQLの書き方は
ご存知の方教えてください。


HOta  2009-03-16 18:33:25  No: 33667

NVLはANSI標準にはありませんが、NULLはWhere句で使えます。


小豚丸  2009-03-17 02:22:26  No: 33668

質問はあいまい過ぎて、すみません。

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

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

よろしくお願いします。


HOta  2009-03-17 17:45:40  No: 33669

Paradoxの場合、値がNULLの場合、0で計算します。
Selectの結果でFieldの値がNullの場合は、0でどうでしょうか?


小豚丸  2009-03-18 00:05:12  No: 33670

実際に以下の文で実行したら、

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 19:24:02  No: 33671

>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-19 08:44:12  No: 33672

Hotaさんの案はどうもありがとうございます。
ただし、どうしても一発でSQL文でできないのが
気がすまないが、SQL文でのやり方が知りたかった。


佐助  2009-03-19 16:40:15  No: 33673

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

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


小豚丸  2009-03-19 18:08:45  No: 33674

佐助さん、ありがとうございました。
以下のように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."発生月"


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加