表结构如下:
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 请问各位大虾该如何下,描述不明确的还请见谅,分不多了,小弟先谢谢。
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 请问各位大虾该如何下,描述不明确的还请见谅,分不多了,小弟先谢谢。
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
;
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
;