各位高工,兄弟有个oracle查询的问题:
下面是三个表 
1:Cbm_Unit 代理商基本信息表 
2:Cbm_Unit_Detail  代理商附加信息表
3:cbm_tbparams 系统参数表
其中:
   Cbm_Unit 中的CCounty_code为 区县的编码。Cbm_Unit 中主健Cunit_code为Cbm_Unit_Detail的外键. Cbm_Unit_Detail 中 cnet_type(代理商类型)和cbm_tbparams 中的nvalue相关联。有那位大哥指点一下啊,小弟千恩万谢我现在要画一张下面样式的报表,我不知道该怎么写SQL.
代理商类型 | 昭阳区| 鲁甸县| 大关县| 威信县
自建他营   | 20    | 20    | 40    | 60 
他建他营    | 50    | 89    | 90    | 40

解决方案 »

  1.   

    自建他营
    他建他营是什么意思?cbm_tbparams 中的nvalue 是具体的值还是id号?
      

  2.   

    这是一个典型的交叉表的报表,如果纯粹用SQL写出来比较麻烦,如果你用到了报表开发工具的话,你只需要将这几个表关联起来,然后做一些的分组设置即可.    如果直接用一个SQL实现的话,那么需要用到CASE WHEN 类似的语句将横列变成纵列,一般这种情况直适合有固定的纵列值,如果纵列是可变的,只能借助前面提到的方法去解决.
    SQL如下:
    select
      d.cnet_type 
      ,case when u.CCounty_code = '昭阳区' then 'zhaoyang'
       when u.CCounty_code = '鲁甸区' then 'nudian'
       ......
      ,end as area_code
      ,sum(amount field)
    from Cbm_Unit u,Cbm_Unit_Detail d, cbm_tbparams p
    where u.Cunit_code = p.Cunit_code
      and d.cnet_type = p.nvalue
    group by d.cnet_type, area_code
      

  3.   

    顶jerryh2008(苏格拉底),你真是太有犲了。
    Socrates谁?