要生成一个交叉表形式的报表,交叉表大概有20多列,列数固定,每列的筛选条件有三个,用decode嵌套可以实现,SQL如下:select decode(列,'条件3',decode(列,'条件2',decode(列,'条件1',返回字段,''),''),'') as 列1
decode(列,'条件3',decode(列,'条件2',decode(列,'条件1',返回字段,''),''),'') as 列2
.............
decode(列,'条件3',decode(列,'条件2',decode(列,'条件1',返回字段,''),''),'') as 列20from 表我想问问这样做如果在数据量很大的情况下性能如何,会不会很慢啊???如果性能不好希望各位大侠能教我一个好的方法,谢谢了!

解决方案 »

  1.   

    沒見過這樣做的...不是有with case(好像是這樣的,和if差不多)的方式嗎
      

  2.   

    没有用过case,再说这两个不差不多么,我是想问问这种方法的执行效率如何
      

  3.   

    这样的SQL 别说写  就是看的人都会很头疼的
    你换成 case 语句好了
      

  4.   

    我现在也有相同的问题 不知道decode函数能不能嵌套。因为我有两个要筛选的条件。select flw,sum(decode(gzzt,'01',decode(dwlb,'30',hbje,'40',hbje))) 划拨金额 from yy_sfmx where sfrq
    between '20071201' and '20071231';首先要工作状态符合‘01’,之后单位类别要符合‘30’或‘40’,两个条件都符合返回hbje。
    如果能嵌套,那么我认为这个函数就和EXCEL 中的IF函数类似了。
    我个人是比较喜欢函数的,因为没学过程序语言,所以觉得函数比较简捷。上面的命令行不知道写的对不对,如果你知道,请帮忙指点下。
      

  5.   

    select (case when 列='条件1' and 列='条件2' and 列='条件3' else 0 end) as 字段
    from 表
      

  6.   

    select (case when 列='条件1' and 列='条件2' and 列='条件3' then '值' else 0 end) as 字段
    from 表