300分讨教如何实现NULL的替换?(300分)

  • 主题发起人 主题发起人 madm
  • 开始时间 开始时间
M

madm

Unregistered / Unconfirmed
GUEST, unregistred user!
如果有两个表 A B

table A
FA1 FA2
1 DFS
2 SDFS
3 SDF
4 SDF1
5 WRDFG
6 SDFDF

table B
FB1 FB2
1 12312
5 2323
6 23

用 SELECT A.FA1,A.FA2,B.FB2 FROM A LEFT OUTER JOIN B ON FB1 = FA1
将得到

FA1 FA2 FB2
1 DFS 12312
2 SDFS NULL
3 SDF NULL
4 SDF1 NULL
5 WRDFG 2323
6 SDFDF 23

但我想得到

FA1 FA2 FB2
1 DFS 12312
2 SDFS 0
3 SDF 0
4 SDF1 0
5 WRDFG 2323
6 SDFDF 23

300分讨教如何实现NULL的替换?
(我用的是INTERBASE6。0)
 
用 SELECT A.FA1,A.FA2,isnull(B.FB2,0) FROM A LEFT OUTER JOIN B ON FB1 = FA1
 
我用的是INTERBASE6。0
isnull(B.FB2,0) 是一个udf吗?如果是能否EMAIL给我 MADM@21CN.COM
 
输出的时候判断一下就是了。可以在DB控件的事件里面写,如果要输出到报表,就在
TQRDBText等控件的onprint事件中写。
 
对于sql server可以如下写:
SELECT A.FA1,A.FA2,isnull(B.FB2,0) as FB2
FROM A LEFT OUTER JOIN B ON FB1 = FA1
其它的不一定支持isnull函数.
 
tanglu 的办法可以,但我要用在存储过程中,一定要用sql
 
Interbase没有isnull的
 
SELECT A.FA1,A.FA2,case (when B.FB2=null then 0 else b.fb2)
FROM A LEFT OUTER JOIN B ON FB1 = FA1
 
没用过INTERBASE
不过ORACLE中有NVL(列,指定值)函数可将列中的NULL转换为指定值。
 
to zwma :
INTERBASE 不支持
 
实在不行用计算字段试试吧,就当作是个过渡吧
在ongettext过程中判断如果是null的话给计算字段赋值为'0'
考虑不要在存储过程中实现这个了,在客户端这里来实现也一样
 
我想直接把字段设置为数值型,录入时为空则为0
 
interbase 能支持iif ,或when 吗?,不能的话,就别用它了.
 
嘿嘿,
如果没有这个函数,就设默认值阿。
还是不行,那只能在程序里加个判断了。
 
where ... is null应该可以
 
SELECT A.FA1,A.FA2,isnull(B.FB2,0) FROM A LEFT OUTER JOIN B ON FB1 = FA1
 
我要的是 interbase 的解决办法, 不要再谈sql server 了
 
1、创建该表时设该列NOT NULL,同时设默认值为0
2、程序中控制
3、查看interbase的帮助,里面应该能找到相应函数。

不好意思,对interbase不熟,只能给你提个建议,
希望会有更明确的答案。
 
没有什么简单的办法

我自己写了一个isnull的UDF函数,但传回的不是NULL值也不是0

function ISNULL(var A:INTEGER;B: INTEGER): INTEGER;

begin
IF VarIsNull(A) THEN
result := 0
else
result := A;
end;


请各位 INTERBASE 的大侠 多指点

(INTERBASE 自带的 ABS() 可以将NULL 转成 0,但负数也变正了)

 
iie的办法我做过,可以直接用... where ...=Null
 
后退
顶部