首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle SQL中创建枢轴表的最有效(快速)方法

在Oracle SQL中创建枢轴表的最有效(快速)方法
EN

Stack Overflow用户
提问于 2022-08-23 09:11:53
回答 1查看 44关注 0票数 0

给出以下示例数据,但行数非常多:

代码语言:javascript
复制
CREATE TABLE foo (
    ts DATE NOT NULL,
    st VARCHAR2(10) NOT NULL CHECK (st IN ('open', 'wip', 'closed')) 
);
INSERT INTO foo VALUES (SYSDATE-2, 'closed');
INSERT INTO foo VALUES (SYSDATE-2, 'closed');
INSERT INTO foo VALUES (SYSDATE-2, 'wip');
INSERT INTO foo VALUES (SYSDATE-1, 'closed');
INSERT INTO foo VALUES (SYSDATE-1, 'wip');
INSERT INTO foo VALUES (SYSDATE-1, 'wip');
INSERT INTO foo VALUES (SYSDATE, 'wip');
INSERT INTO foo VALUES (SYSDATE, 'open');
INSERT INTO foo VALUES (SYSDATE, 'open');
COMMIT;
SELECT * FROM  foo ORDER BY ts;

创建以下数据透视表的最有效(快速)方法是什么(每个ts为一行,每个st值为列):

代码语言:javascript
复制
ts         open   wip    closed
---------- ------ ------ ------
21.08.2022 0      1      2
22.08.2022 0      2      1
23.08.2022 2      1      0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-23 09:32:14

两个最明显的选择是..。嗯,旋转:

代码语言:javascript
复制
SQL> select *
  2  from foo
  3  pivot (
  4    count(st)
  5    for st in ('open' as open, 'wip' as wip, 'closed' as closed)
  6  )
  7  order by ts;

TS               OPEN        WIP     CLOSED
---------- ---------- ---------- ----------
21.08.2022          0          1          2
22.08.2022          0          2          1
23.08.2022          2          1          0

SQL>

或有条件的聚合:

代码语言:javascript
复制
SQL> select ts,
  2    sum(case when st = 'open'   then 1 else 0 end) as open,
  3    sum(case when st = 'wip'    then 1 else 0 end) as wip,
  4    sum(case when st = 'closed' then 1 else 0 end) as closed
  5  from foo
  6  group by ts
  7  order by ts;

TS               OPEN        WIP     CLOSED
---------- ---------- ---------- ----------
21.08.2022          0          1          2
22.08.2022          0          2          1
23.08.2022          2          1          0

SQL>

是比另一个好还是坏(或者别的什么),我不知道--你必须对真实数据做一些测试。

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

https://stackoverflow.com/questions/73456012

复制
相关文章

相似问题

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