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

解決


小豚丸  2009-03-15 22:11:55  No: 33666  IP: [192.*.*.*]

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

編集 削除
HOta  2009-03-16 09:33:25  No: 33667  IP: [192.*.*.*]

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

編集 削除
小豚丸  2009-03-16 17:22:26  No: 33668  IP: [192.*.*.*]

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

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

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

よろしくお願いします。

編集 削除
HOta  2009-03-17 08:45:40  No: 33669  IP: [192.*.*.*]

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

編集 削除
小豚丸  2009-03-17 15:05:12  No: 33670  IP: [192.*.*.*]

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

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  No: 33671  IP: [192.*.*.*]

>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  No: 33672  IP: [192.*.*.*]

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

編集 削除
佐助  2009-03-19 07:40:15  No: 33673  IP: [192.*.*.*]

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

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

編集 削除
小豚丸  2009-03-19 09:08:45  No: 33674  IP: [192.*.*.*]

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

編集 削除