动态行转列 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