行转列与列转行案例

行转列与列转行案例

ID:38684814

大小:78.50 KB

页数:5页

时间:2019-06-17

行转列与列转行案例_第1页
行转列与列转行案例_第2页
行转列与列转行案例_第3页
行转列与列转行案例_第4页
行转列与列转行案例_第5页
资源描述:

《行转列与列转行案例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.使用视图SQLcode?123456789101112131415161718192021222324252627createorreplaceprocedurerow_to_col(tabnameinvarchar2,group_colinvarchar2,column_colinvarchar2,value_colinvarchar2,Aggregate_funcinvarchar2default'max',colorderinvarchar2defaultnull,roworderinvarchar2defaultnull,when_value_nullinvarc

2、har2defaultnull,viewnameinvarchar2default'v_tmp')AuthidCurrent_Userassqlstrvarchar2(2000):='createorreplaceview'

3、

4、viewname

5、

6、'asselect'

7、

8、group_col

9、

10、'';c1sys_refcursor;v1varchar2(100);beginopenc1for'selectdistinct'

11、

12、column_col

13、

14、'from'

15、

16、tabname

17、

18、casewhencolorderisnotnullthen'orderby'

19、

20、colorder

21、end;loopfetchc1intov1;exitwhenc1%notfound;sqlstr:=sqlstr

22、

23、chr(10)

24、

25、','

26、

27、casewhenwhen_value_nullisnotnullthen'nvl('end

28、

29、Aggregate_func

30、

31、'(decode(to_char('

32、

33、column_col

34、

35、'),'''

36、

37、v1

38、

39、''','

40、

41、value_col

42、

43、'))'

44、

45、casewhenwhen_value_nullisnotnullthenchr(44)

46、

47、when_value_null

48、

49、chr(41)end

50、

51、'"'

52、

53、v1

54、

55、'"';e

56、ndloop;closec1;sqlstr:=sqlstr

57、

58、'from'

59、

60、tabname

61、

62、'groupby'

63、

64、group_col

65、

66、casewhenroworderisnotnullthen'orderby'

67、

68、roworderend;executeimmediatesqlstr;endrow_to_col;这里修改了传入参数名,使其更容易理解。继续使用了创建视图这个方法,当然也可以改成用游标传出。参数:tabname需要进行行转列操作的表名;group_col查询结果要按某列或某些列分组的字段名;column_col要从行转成列的字段;value_col需要聚合的值

69、字段;Aggregate_func选用的聚合函数,可选,默认为max;colorder行转列后列的排序,可选;roworder行转列后记录的排序,可选;when_value_null若value_col字段的值聚合后为空,则转换成该值,可选;viewname创建的视图名称,可选,默认为v_tmp。举例:SQLcode?1234567891011--测试数据createtablerowtocol_testasselect2009year,1month,'部门1'dept,50000expenditurefromdualunionallselect2009,2,'部门1',200

70、00fromdualunionallselect2009,2,'部门1',30000fromdualunionallselect2010,1,'部门1',35000fromdualunionallselect2009,2,'部门2',40000fromdualunionallselect2009,3,'部门2',25000fromdualunionallselect2010,2,'部门3',60000fromdualunionallselect2009,2,'部门3',15000fromdualunionallselect2009,2,'部门3',10000fromdual;

71、我现在想根据year和month分组,将部门转成列。SQLcode?123456789101112131415161718192021222324SQL>select*fromrowtocol_test;YEARMONTHDEPTEXPENDITURE------------------------------------20091部门15000020092部门12000020092部门13000020101部门13500020092部门24000020093部门22500020102部门3600002

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。