我有一张桌子
create table t(
xparam varchar2(10),
xtime date,
xvalue varchar2(10)
);使用数据
INSERT INTO t VALUES ('param1', sysdate, 'ok');
INSERT INTO t VALUES ('param1', sysdate-1, 'soso');
INSERT INTO t VALUES ('param1', sysdate-2, 'well');
INSERT INTO t VALUES ('param2', sysdate, 'perfect');
INSERT INTO t VALUES ('param2', sysdate-1, 'good');
INSERT INTO t VALUES ('param2', sysdate-2, 'ups');所以它看起来是这样的:
param1 29-Dec-13 ok
param1 28-Dec-13 soso
param1 27-Dec-13 well
param2 29-Dec-13 perfect
param2 28-Dec-13 good
param2 27-Dec-13 ups有没有一种方法来表示它们
------- 29-Dec-13 28-Dec-13 27-Dec-13
param1 ok soso well
param2 perfect good ups类似的问题已经被问过了,但他们建议在where子句中列出所有列;我想避免这种情况。
假设有几年的数据,并且每个月都会有新的数据,所以希望避免在"when‘20/12/ 20122013’then 20122013 ..“中列出所有可能的日期,并在每个月手动添加新列。
类似地,还有很多参数,比如数千个;所以我不想把它们也列出来。
UPD:经过一段时间的思考……好的,这些日期是按月计算的,实际上我可以在几年内创建这些列;没有问题
发布于 2013-12-30 06:25:49
我不认为有一种“标准”方法可以做到这一点,因为它会使列计数变得非常量,这或多或少违反了所有的API约定。
如果您能够满足于,比方说,20个最新的,您可能可以在PL/SQL过程中执行一些操作,选择20个最新的xtime,将它们连接成一个字符串,用create table helpertable as select <statement to get the 20 newest columns from t>将该字符串括起来,然后对该字符串执行EXECUTE IMMEDIATE。然后是helpertable中的select *。
想想看,如果PL/SQL过程在创建helpertable之前删除了它,那么为什么helpertable中的列计数应该是恒定的,这可能没有真正的理由。只要确保不超过一个表中可能的最大列数即可。
https://stackoverflow.com/questions/20830561
复制相似问题