SQL 将行合并为列
Posted
技术标签:
【中文标题】SQL 将行合并为列【英文标题】:SQL merge rows as columns 【发布时间】:2020-08-10 12:36:52 【问题描述】:我有一些实验室值的发现。是否可以创建一个 sql 语句,它会动态产生以下结果?我想创建一个视图,将每个发现(res/printdate)作为一/两列。
提前致谢。
【问题讨论】:
动态可能会很棘手,因为您要旋转的列数可能会达到 n... 我是对的吗?或者您是否考虑过最大数量的枢轴?如果您知道您可能需要预先调整多少列,我想可以编写这样的代码 您好,谢谢您的回复!可以得到结果的数量,比如 5。 您使用的是哪种 DBMS 产品? “SQL”只是所有关系数据库都使用的一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag。 Why should I tag my DBMS 对不起,我已经编辑了标签。这是甲骨文。 请为所有 idAMY and AP
添加预期的结果集。希望您想按id
列分组。你不需要res
专栏?
【参考方案1】:
我会建议使用老派的方式:使用 windows 功能 -
Rownum over partition by
https://www.oracletutorial.com/oracle-analytic-functions/oracle-row_number/
假设您的表名为 Lab_Result
添加一个名为 RowNum 的新列
Create View Lab_Result_W_Row as
select
LR.*,
Row_number() over(partition_by id, order by printdate) Row_Num
from
Lab_Result LR;
遍历结果
select
R1.id,
R1.uni,
R1.rpsrange,
R1.val as Val1,
R1.Printdate as printdate1,
R2.Val as Val2
R2.Printdate as Printdate2
from
Lab_Result_W_Row R1
left join Lab_Result_W_Row R2 on
R1.id =R2.id
and
Row2.Row_num = 2
Where
R1.Row_num =1
您仍然可以使用数据透视函数来完成工作。但是你仍然需要有 row_num 列
【讨论】:
以上是关于SQL 将行合并为列的主要内容,如果未能解决你的问题,请参考以下文章