表结构如下:
TABLE I1,
IC_TEX_T
(
 ICNO   int,
 RYAMT  NUMBER(24,2),
 ..
 ..
 ..
 ..
);TABLE I2,
IC_TUR_T
(
 ICNO   int,
 AMTYNA VARCHAR2(20 CHAR),
 ..
 ..
 ..
 ..
)
需求:
当I2.AMTYNA='CUST_GROUP' then  I1.RYAMT 取列名为  CUST_GROUP_AMT ;
当I2.AMTYNA='CUST_ORI'   then  I1.RYAMT 取列名为  CUST_ORI_AMT ;
当I2.AMTYNA='LOC_GROUP'  then  I1.RYAMT 取列名为  LOC_GROUP_AMT ;
当I2.AMTYNA='LOC_ORI'    then  I1.RYAMT 取列名为  LOC_ORI_AMT ;当然还要join 到其他很多表 ,select 出其他column,且还有类似要求,只是一个sample,
我写的是这样
select 
ICNO AS ICNO,
CASE WHEN I2.AMTYNA='CUST_GROUP' THEN I1.RYAMT END AS CUST_GROUP_AMT,
CASE WHEN I2.AMTYNA='CUST_ORI'   THEN I1.RYAMT END AS CUST_ORI_AMT ,
CASE WHEN I2.AMTYNA='LOC_GROUP'  THEN I1.RYAMT END AS LOC_GROUP_AMT ,
CASE WHEN I2.AMTYNA='LOC_ORI'    THEN I1.RYAMT END AS LOC_ORI_AMT ,
..
..
..
..
FROM 
IC_TEXT_T  I1
INNER JOIN I2 ON I1.ICNO=I2.ICNO
INNER JOIN..
..
这样会出现一人结果为多行,即:
ICNO   CUST_GROUP_AMT   CUST_ORI_AMT    LOC_GROUP_AMT      LOC_ORI_AMT 
5547    2000.00          NULL             NULL                 NULL   
5547    NULL             5000.00          NULL                 NULL   
5547    NULL             NULL             30000.00             NULL   
5547    NULL             NULL             NULL                 1000.00   想要结果如下:
ICNO   CUST_GROUP_AMT   CUST_ORI_AMT    LOC_GROUP_AMT      LOC_ORI_AMT 
5547    2000.00          5000.00          3000.00            1000.00  请问各位大虾该如何下,描述不明确的还请见谅,分不多了,小弟先谢谢。

解决方案 »

  1.   

    又是行转列问题
    select ICNO,
    max(CASE WHEN I2.AMTYNA='CUST_GROUP' THEN I1.RYAMT END) AS CUST_GROUP_AMT,
    max(CASE WHEN I2.AMTYNA='CUST_ORI' THEN I1.RYAMT END) AS CUST_ORI_AMT ,
    max(CASE WHEN I2.AMTYNA='LOC_GROUP' THEN I1.RYAMT END) AS LOC_GROUP_AMT ,
    max(CASE WHEN I2.AMTYNA='LOC_ORI' THEN I1.RYAMT END) AS LOC_ORI_AMT ,
    from IC_TEXT_T I1
    INNER JOIN I2 ON I1.ICNO=I2.ICNO
    group by ICNO
    ;
      

  2.   

    select ICNO,
    max(CASE WHEN I2.AMTYNA='CUST_GROUP' THEN I1.RYAMT END) AS CUST_GROUP_AMT,
    max(CASE WHEN I2.AMTYNA='CUST_ORI' THEN I1.RYAMT END) AS CUST_ORI_AMT ,
    max(CASE WHEN I2.AMTYNA='LOC_GROUP' THEN I1.RYAMT END) AS LOC_GROUP_AMT ,
    max(CASE WHEN I2.AMTYNA='LOC_ORI' THEN I1.RYAMT END) AS LOC_ORI_AMT --,这里多个逗号
    from IC_TEXT_T I1
    INNER JOIN I2 ON I1.ICNO=I2.ICNO
    group by ICNO
    ;