日期:2014-05-16  浏览次数:20792 次

动态行转列 sql怎么写
动态行转列 sql怎么写

表 table

id prodid lieming value  dingdan

1 p01       数量    50      ding1

2 p01       价格    10      ding1

3 p01       赠送数量    1   ding1

4 p02       数量    50       ding1

5 p02       价格    10       ding1

6 p02            赠送数量  0  ding1

类似这样的, 不过lieming是不固定的 可以动态添加的,可以添加5列 10列 20列 所以 数量、价格这些是不能写死的,最后dingdan查询出来, 具体的这个sql应该怎么写? 万分感谢了




------解决方案--------------------
给你个找来的例子,你也可以百度搜索的
需求:  
     昨天客户有个新的需求,就是根据原始表的数据转行后在报表中显示。其实就是一个行列转换  
具体来说,这里简化一些其它需求,只是讲述行列转换的具体内容:  
客户有张原始的表(假设temp1),表中只有4个栏位(假设id,name,sex,provience),但是表中数据量不确定,随时会改变。  
现在客户要每跑一次批次就把temp1表的信息转换到另一张表(假设temp2),需要注意的是,temp2表的栏位跟temp1的数据是对应的  
举个例子来说,  
假设 temp1表数据有4条:  
ID         NAME  SEX  PROVENCE  
---------- ----- ---- ----------  
XQ07020001 张三   男  成都  
XQ07020002 李四   男  眉山  
XQ07020003 王五   女  乐山  
XQ07020004 刘倩   男  南充  
  
而现在客户由于报表上要显示temp1转换后的temp2中的数据,批次中固定只会最多抓取temp1表的10条数据  
一个一个的写入temp2与之对应的栏位。也就是说现在temp2表结构式固定的,  
如下:(其中最后两列是异动日期txdat和移动时间txtm,不管temp1中数据有多少,这两个栏位都是存在的!)  
COL1       COL2       COL3       COL4       COL5 ... COL10  TXDAT    TXTM  
-------------------------------------------  
XQ07020001 XQ07020002 XQ07020003 XQ07020004                 20101228 13125000  
张三       李四       王五       刘倩                       20101228 13125000  
男         男         女         男                         20101228 13125000  
成都       眉山       乐山       南充                       20101228 13125000  
  
当源数据temp1中不足10笔数据的时候,temp2后面小于10的栏位就是空值,如上数据。  
  
这里需要补充一点最关键的是,栏位的类型和长度,COL1,COL2,COL3.。。。都是varchar2(20),  
而原表temp1中各个栏位都是va