在oracle中将行值添加到列

Posted

技术标签:

【中文标题】在oracle中将行值添加到列【英文标题】:add row value to column in oracle 【发布时间】:2021-04-18 09:46:27 【问题描述】:

我有一张这样的桌子:

现在; 我想用 SELECT 语句将行值映射到列。 结果应该是这样的:

【问题讨论】:

从您已经知道需要调整的标签中,您尝试了什么,您的问题/疑问是什么? 你的逻辑不清楚。例如,您有两列日期,不清楚哪个日期用于结果。结果的第一列称为id;那是原始数据中的一列——但是其余的行发生了什么?或者这真的是personidc_date 是什么?它不在原始数据中。 我需要每个 PERSONID 一行显示特定 REPORTDATE 的所有 ORIGINALDATE 【参考方案1】:

你可以这样做。

Select * from (select id, person_id, f_device, report_date, originaldate)
pivot
(
 count(*)
 for person_id in (1, 2, 3, 4)
);

也就是说,您需要聚合,您将获得 select 语句和 for 子句中的列。此查询将计算 (1, 2, 3, 4) 中 person_id 的行数,并在内部按剩余列分组。

由于您的问题不清楚,如果不是这种情况,请尝试改进您的问题。

更新

WITH cte as ( select personid id, reportdate c_date, listagg(originaldate||' ') og FROM my_table GROUP BY personid, reportdate),
cte2 as (SELECT  id, c_date, regexp_substr(og, '(.*?)( |$)', 1, 1 ) one,
                                  regexp_substr(og, '(.*?)( |$)', 1, 2) two,
                                  regexp_substr(og, '(.*?)( |$)', 1, 3 ) three,
                                  regexp_substr(og, '(.*?)( |$)', 1, 4 ) four
              from cte)
SELECT * FROM cte2;

如果您希望每行都有一个不同的 personid,则需要汇总 reportdate

WITH cte as ( select personid id, max(reportdate ) c_date, listagg(originaldate||' ') WITHIN GROUP(ORDER BY personid ) og FROM my_table GROUP BY personid),
cte2 as (SELECT  id, c_date, regexp_substr(og, '(.*?)( |$)', 1, 1 ) one,
                                  regexp_substr(og, '(.*?)( |$)', 1, 2) two,
                                  regexp_substr(og, '(.*?)( |$)', 1, 3 ) three,
                                  regexp_substr(og, '(.*?)( |$)', 1, 4 ) four
              from cte)
SELECT * FROM cte2;

【讨论】:

我需要每个 PERSONID 一行显示特定 REPORTDATE 的所有 ORIGINALDATE 能否详细说明,c_date 是什么? 第一个表中的PERSODID = 第二个表中的ID 和第一个表中的REPORTDATE = 第二个表中的c_date 而reportdate是c_date? 一二三是特定人的原始日期?

以上是关于在oracle中将行值添加到列的主要内容,如果未能解决你的问题,请参考以下文章

在oracle SQL中将行移动到列和列到行

修改或添加以将 NOT NULL 约束添加到列?甲骨文

如何在anylogic中将nXn矩阵添加到数据库中的集合

在 oracle 中将 oracle 用户名/user_id 添加到标题

FlowLayoutPanel 添加到列?

在颤动中动态地将小部件添加到列的子项