查询语句:
select 计划编号,名称,金额 from 表1 ;
结过是:
计划编号   名称    金额
1               名称1         1
2               名称2          2
3               名称3          3
4               名称4          4
5               名称5          5我这边有个需求,需要计划编号为 2 的那行记录的金额 是由 计划编号为 4 和 5 的合计
想要的结过是:
计划编号   名称      金额
1               名称1         1
2               名称2         9
3               名称3         3
4               名称4         4
5               名称5         5求SQL高手帮忙解答一下,能否通过SQL语句实现 小弟的需求。

解决方案 »

  1.   

    select 计划编号,名称, case 计划编号='2' then (select sum(金额) 金额 from 表1 where 计划编号='4' or 计划编号='5') else 金额 end 金额 from 表1 
    手打的,你自己测试一下。
      

  2.   

    sum金额,根据编号分组,编号4/5转成2,嘿嘿
      

  3.   

    UPDATE TABLE SET 金额=(SELECT SUM(金额) FROM TABLE WHERE 计划编号 in(4,5))where 计划编号=2
      

  4.   

    挺简单的啊,用decode判断,计划标号为2时,其金额是计划编号4和5金额的和。具体怎么实现,看看decode用法吧
      

  5.   

    可以使用decode实现,判断当计划标号为2时查计划编号4和5金额的和作为结果。
      

  6.   

    说decode我试了下好像不好使,我的这种是绝对没问题的select *  from 
    (select * from test t where t.code!=2
    union all
    select 2 as code,'num2' as a,sum(case when code in (2,5,6) then sum1 else 0 end) as sum1 from test)
    order by code 
    相应的表名字段名什么的自己对应下,亲测有效
      

  7.   

    3楼的应该好用点,少了个when吧
      

  8.   


    WITH TAB_TEST AS
     (SELECT 1 "计划编号", '名称1  ' "名称", 1 "金额" FROM DUAL
      UNION ALL
      SELECT 2, '名称2', 2 FROM DUAL
      UNION ALL
      SELECT 3, '名称3', 3 FROM DUAL
      UNION ALL
      SELECT 4, '名称4', 4 FROM DUAL
      UNION ALL
      SELECT 5, '名称5', 5 FROM DUAL)
    SELECT "计划编号",
           "名称",
           CASE
             WHEN "计划编号" = 2 THEN
              (SELECT SUM("金额") FROM TAB_TEST T WHERE t."计划编号" IN (4, 5))
             ELSE
              "金额"
           END "金额"
      FROM TAB_TEST