case when求助!!
涉及表:
   sdsb_dwgzxx(单位工资信息表)
 orgid      dwgzze           rq
单位编号  单位工资总额      日期
  1         13234         2011-01-01
  2         3214          2011-08-01
  2         9073          2011-01-01
  3         53423         2011-01-01
  4         13234         2011-01-01
  5         3214          2011-07-01
  6         90678         2011-01-01
  6         5499          2011-10-01
  7         9802          2011-11-01查询语句:
 
select 
case
when to_char(max(d.rq), 'yyyy-mm') > '2011-02' 
then min((select b.dwgzze dwgzze from sdsb_dwgzxx b where b.rq = (select min(a.rq) rq from sdsb_dwgzxx a where a.orgid=d.orgid and to_char(a.rq, 'yyyy') = '2011') and b.orgid=d.orgid))
else 800
end as dwgzze
from sdsb_dwgzxx d where d.orgid=2
其中
日期:'2011-02'  单位编号:2 都是通过页面输入。
这条语句的功能是:页面输入的日期,单位编号,通过输入日期与表里该单位的日期比较,来确定该单位的工资总额,
我的问题:
现在只能统计出单个单位的工资总额,即,只能统计指定单位的工资总额,这条语句只能统计出一条数据,我现在希望在不输入单位编号时,分别选择出所有单位的工资总额。
目标如下:
当我输入:‘2011-03’时,查出出:800   --1(单位编号)
9073  --2
800   --3
800   --4
3214  --5
90678 --6
9802  --7

解决方案 »

  1.   


    你这个跟CASE WHEN 有什么关系么?
    where d.orgid=2 这个条件前台实现的时候可以通过拼接SQL的方式生成么...
    --1、没有输入单位编号时SQL
    select 
    case
    when to_char(max(d.rq), 'yyyy-mm') > '2011-02' 
    then min((select b.dwgzze dwgzze from sdsb_dwgzxx b 
    where b.rq = (select min(a.rq) rq from sdsb_dwgzxx a where a.orgid=d.orgid and to_char(a.rq, 'yyyy') = '2011') and b.orgid=d.orgid))
    else 800
    end as dwgzze
    from sdsb_dwgzxx d where 1 = 1 --2、输入单位编号时
    上述SQL+ AND orgid=..
      

  2.   

    我的日期是双日期,日期段
    如:'2011-02' 至'2011-09'
    我只写了一个日期,一种情况是为了把问题说明。
    实际是要判断三种情况:case
    when to_char(max(d.rq), 'yyyy-mm') > '2011-09' 
    then......
    when to_char(max(d.rq),'yyyy-mm')<='2011-02'
    then......
    when to_char(max(d.rq),'yyyy-mm')>'2011-02' and to_char(max(d.rq),'yyyy-mm')<='2011-09'
    then......
    至于你说的单位问题,你可能没注意到:
    then 。后面如果是查询sql时,只能加min、max、count等分组函数,否则报“不是单组分组函数”,
    但是一加这些,你只能取出一条值,就像你说的,如果不加单位编号,它取的是所有单位里最min或最max值(一条值)。
    在这些情况下,该如何查询所有单位的工资总额呢?
      

  3.   

    那只能说你case 前面在加个单位编号判断了。