Oracle里的交叉SQL语句写法

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

实例说明

资料表结构(红色为主键)==>

主表:TEST_PART_COST_TAB(料号资料表)

PART_NO VARCHAR2(20)

PART_NAME VARCHAR2(50)

从表:TEST_PART_COST_DT_TAB(料号成本资料表)

PART_NO VARCHAR2(10)

COST_ID VARCHAR2(5)

COST NUMBER

数据==>

主表资料:

PART_NO PART_NAME

1 1000 name1000

2 1001 name1001

从表资料:

PART_NO COST_ID COST

1 1000 100 1.1

2 1000 200 1.2

3 1000 300 1.3

4 1000 321 1.321

5 1001 100 2.1

交叉资料==>

SQL语句产生的结果

PART_NO PART_NAME COST_100 COST_200 COST_300 COST_321

1 1000 name1000 1.1 1.2 1.3 1.321

2 1001 name1001 2.1 0 0 0

具体的交叉SQL语句写法:

select a.part_no,a.part_name,

--sum(b.cost)

sum(case when b.cost_id = '100' then b.cost else 0 end) as cost_100,

sum(case when b.cost_id = '200' then b.cost else 0 end) as cost_200,

sum(case when b.cost_id = '300' then b.cost else 0 end) as cost_300,

sum(case when b.cost_id = '321' then b.cost else 0 end) as cost_321

from test_part_cost_tab a,test_part_cost_dt_tab b

where a.part_no = b.part_no

group by a.part_no,a.part_name

PS: 若主表有资料,从表没有资料时,交叉后会没有相应的资料

解决办法是在WHERE条件里用外连接

where a.part_no = b.part_no(+)

参考资料:

http://www.cnblogs.com/iouniuniu/archive/2004/04/05/5238.ASPx

==>此文的语法与本文的语法不同

http://it.icxo.com/Htmlnews/2004/11/11/454293.htm

http://www.itpub.net/176727.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航