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 对不起,我已经编辑了标签。这是甲骨文。 请为所有 id AMY 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 将行合并为列的主要内容,如果未能解决你的问题,请参考以下文章

SQL:将行与列中的逗号分隔值合并

SQL 将行转置为列

SQL将行转置为列(按键变量分组)?

SQL:将行转换为列

Oracle SQL 将行转换为列

SQL Server JSON 将行转置为列