SQL 如何根据不同条件取不同字段

来源:百度知道 编辑:UC知道 时间:2024/05/22 20:15:56
例子1:
有A、B两个表(其中A.a0与B.b0字段是关联的字段),当A.a1字段不等于3时,取B.b2字段,当B.b2字段为空时,取B.b22字段;
当A.a1字段不等于3时,取B.b3字段,当B.b3字段为空时,取B.b33字段;
当A.a1字段不等于3时,取B.b4字段,当B.b4字段为空时,取B.b44字段;
当A.a1字段不等于3时,取B.b5字段,当B.b5字段为空时,取B.b55字段。
求一个满足这个条件的SQL语句。
谢谢大家这么热情,如果不用case可以写出来么?

select case when A.a1<>3 and B.b2 is null then B.b22
case when A.a1<>3 and B.b3 is null then B.b33
case when A.a1<>3 and B.b4 is null then B.b44
case when A.a1<>3 and B.b5 is null then B.b55
else null
end
from A,B
where A.a0=B.b0

当A.a1字段不等于3时,取B.b2字段,当B.b2字段为空时,取B.b22字段;
当A.a1字段不等于3时,取B.b3字段,当B.b3字段为空时,取B.b33字段;
当A.a1字段不等于3时,取B.b4字段,当B.b4字段为空时,取B.b44字段;
当A.a1字段不等于3时,取B.b5字段,当B.b5字段为空时,取B.b55字段。

越看越糊涂

==我来做。
先刷牙。。
好了。。

DECLARE @i INT
CREATE PROCEDURE P_P
AS
SELECT * FROM B表
WHERE A.a1<>3
FOR(i=2;i<5;i++)
BEGIN
IF B.b@i<>NULL
PRINT B.B@i
ELSE
PRINT B.B@ii
END

我做的不一定正确,没有资料可以验证,仅供参考,有错请原谅。

select nvl2(b.b2,b.b22,b.b3,b.33,b4,b44,b5,b55)
from a,b
where a.a1=!3
and a.a0=b.bo

select nvl2(b.b2,b.b22),nvl2(b.b3,b.33),nvl2(b4