首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL pivot

Oracle SQL pivot
EN

Stack Overflow用户
提问于 2013-12-30 06:01:02
回答 1查看 377关注 0票数 2

我有一张桌子

代码语言:javascript
复制
create table t(
xparam varchar2(10),
xtime  date,
xvalue varchar2(10) 
);

使用数据

代码语言:javascript
复制
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');

所以它看起来是这样的:

代码语言:javascript
复制
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

有没有一种方法来表示它们

代码语言:javascript
复制
------- 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:经过一段时间的思考……好的,这些日期是按月计算的,实际上我可以在几年内创建这些列;没有问题

EN

回答 1

Stack Overflow用户

发布于 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中的列计数应该是恒定的,这可能没有真正的理由。只要确保不超过一个表中可能的最大列数即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20830561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档