ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用SQL寫,該怎么寫?

用SQL寫,該怎么寫?

原创 Linux操作系统 作者:jack198409 时间:2007-11-07 00:00:00 0 删除 编辑
  1. 我现在有一个表,如下:
    A1 A2 B1 B2
    111 50 111 20
    121 60 121 100
    122 40
    135 55
    141 15
    NULL NULL 101 40
    NULL NULL 151 21
    想要得到的结果是:
    C1 C2
    111 30
    121 40
    122 40
    135 55
    141 15
    101 40
    151 21
    即 如果A1=B1时,A1或B1随便取一个,后一个字段的值为 ¦A2-B2 ¦
    A1=null时,结果取B1, ¦A2-B2 ¦
    B1=null时,结果取A1, ¦A2-B2 ¦
    请问能用SQL语句实现吗?

WITH A AS (SELECT 111 A1,50 A2,111 B1, 20 B2 FROM DUAL
UNION
SELECT 121 A1,60 A2,121 B1, 100 B2 FROM DUAL
UNION
SELECT 122 A1,40 A2,NULL B1, NULL B2 FROM DUAL
UNION
SELECT 135 A1,55 A2,NULL B1, NULL B2 FROM DUAL
UNION
SELECT 141 A1,15 A2,NULL B1, NULL B2 FROM DUAL
UNION
SELECT NULL A1,NULL A2, 101 B1,40 B2 FROM DUAL
UNION
SELECT NULL A1,NULL A2,151 B1, 21 B2 FROM DUAL
)
select NVL(A1,B1),CASE WHEN A1=B1 THEN ABS(A2-B2)
WHEN A1 IS NULL THEN ABS(NVL(A2,0)-NVL(B2,0))
WHEN B1 IS NULL THEN ABS(NVL(A2,0)-NVL(B2,0)) END C2
FROM A

其實仔細看了哈,沒想到還有更簡單

select nvl(A1,B1) C1,abs(NVL(A2,0)-NVL(B2,0)) C2 from A;
一定要加NVL


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10768286/viewspace-83462/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 驅動之家
请登录后发表评论 登录
全部评论

注册时间:2007-12-13

  • 博文量
    135
  • 访问量
    295325