表C_DATA_dict_param
dept_id  param_code pvalue
1 11 32
1 12 435
1 13 34
1 14 35
1 15 345
2 11 56
2 12 34
2 13 345
2 14 35
3 11 35
3 12 345
3 13 35
3 14 345
3 15 345
4 11 45
4 12 456
-----------------------------
表C_SET_big_consume
cost_subj_code dept_id
A 1
B 2
B 1
----------------------------
需要得到的结果..............结果 
cost_subj_code param_code 各个单位的合计
A 11 XXX
A 12 XXX
A 13 XXX
A 14 XXX
A 15 XXX
B 11 XXX
B 12 XXX
B 13 XXX
B 14 XXX
B 15 XXXXXX为各个单位的合计值
表C_SET_big_consume如果指定了A对应1则合计值不统计单位1的.
表C_SET_big_consume如果指定了B对应1,2则合计值不统计单位1和2的.

解决方案 »

  1.   

    select b.cost_subj_code,a.param_code,
           (select sum(case when c.dept_id <> b.dept_id then a.pvalue else 0 end) 
               from C_DATA_dict_param c) 各个单位的合计
      from C_DATA_dict_param a,C_SET_big_consume b
     where a.dept_id = b.dept_id
      group by b.cost_subj_code,a.param_code
      

  2.   

    to Jane_64:
    报错 :不是 group by 的表达式
      

  3.   

    select b.cost_subj_code,a.param_code,sum(case when a.dept_id <> b.dept_id then a.pvalue else 0 end) 各个单位的合计 
    from C_DATA_dict_param a,C_SET_big_consume b 
    where a.dept_id = b.dept_id 
    group by b.cost_subj_code,a.param_code
      

  4.   


    抱歉,不要这个group by b.cost_subj_code,a.param_code
      

  5.   

    表C_SET_big_consume如果指定了A对应1则合计值不统计单位1的. 
    表C_SET_big_consume如果指定了B对应1,2则合计值不统计单位1和2的. 上面两句话没看明白
      

  6.   

    select b.cost_subj_code,a.param_code,sum(case when a.dept_id <> b.dept_id then a.pvalue else 0 end) 各个单位的合计 
    from C_DATA_dict_param a,C_SET_big_consume b 
    where a.dept_id = b.dept_id
    group by a.param_code
      

  7.   

    值是错的, 因为select sum(case when c.dept_id <> b.dept_id then a.pvalue else 0 end) 
              from C_DATA_dict_param c
    合计的时候没有考虑到 必须要是在C_SET_big_consume中的同一个cost_subj_code下的值不统计
      

  8.   

    值是错的, 因为select sum(case when c.dept_id <> b.dept_id then a.pvalue else 0 end) 
              from C_DATA_dict_param c 
    合计的时候没有考虑到 必须要是在C_SET_big_consume中的同一个cost_subj_code下的值不统计
      

  9.   


    楼主问问题的时候并没有:必须要是在C_SET_big_consume中的同一个cost_subj_code下的值不统计你自己加这个条件就是了
      

  10.   


    C_SET_big_consume表实现的是类似于黑名单的功能
    如果没有这个表
    结果 
    针对 A和B统计出的结果一样的都是统计全部的单位.有了这个表后,在统计A的时候就不是统计全部单位了,而是统计除去在C_SET_big_consum表中A对应的单位
      

  11.   

    sum(case when c.dept_id <> b.dept_id then a.pvalue else 0 end) 这个就是就是:必须要是在C_SET_big_consume中的同一个cost_subj_code下的值不统计
      

  12.   

    select b.cost_subj_code,a.param_code, 
          (select sum(case when c.dept_id <> b.dept_id then a.pvalue else '0' end) 
              from C_DATA_dict_param c where  DateFlag ='20090100'   ) 各个单位的合计 
      from C_DATA_dict_param a,C_SET_big_consume b 
    where a.dept_id = b.dept_id   and  A.DateFlag ='20090100'  and B.dateFlag='20090100'
       order by  b.cost_subj_code,a.param_code
    这个语句出来的结果COST_SUBJ_CODE PARAM_CODE 各个单位的合计10205 01 312
    10205 01 1256
    10205 02 2983
    10205 02 3588
    10205 03 312000
    10205 03 1570000
    10205 04 1560000
    10206 01 1099
    10206 02 2512
    10206 03 9420000
    1020702 01 1106
    1020702 02 1264
    ---------------------
    10205 01
    不应该有重复的... 而且值也不对.....
      

  13.   

    Sql server 下就很easy了
    先声明一个临时表
    然后将 C_DATA_dict_param 和C_SET_big_consume 中的COST_SUBJ_CODE 叉乘的结果插入然后删除临时表中 deptid 和COST_SUBJ_CODE 出现的对应记录然后针对临时表sum  group by就OK了
      

  14.   

    select b.cost_subj_code,a.param_code,sum(a.pvalue) 各个单位的合计 
    from C_DATA_dict_param a,C_SET_big_consume b 
    group by b.cost_subj_code,a.param_code
    having instr(wmsys.wm_concat(b.dept_id),a.dept_id)=0
    这个试试行吗
      

  15.   

    也是抱 group by 语法错误..我oracle刚接触,,, 以前是做Sqlserver的...
    实在搞不定
      

  16.   

    怎么会报group by 错误呢,我用别的表试语法通过了啊
      

  17.   


    SELECT T1.cost_subj_code,T.* C_DATA_dict_param T,C_SET_big_consume T1
    WHERE T.dept_id=T1.dept_id(+)