如何将列更改为行

Posted

技术标签:

【中文标题】如何将列更改为行【英文标题】:How to change columns to rows 【发布时间】:2020-08-05 20:35:24 【问题描述】:

我有一个问题。

在 SQL 中,我必须使用带有多个错误代码的声明 ID 对表进行编码。所以显示如下

ClaimID    Error1  Error2  Error3 Error4
1234       300     301     302     303

我希望错误显示在单独的行中,例如

ClaimID  Error
1234     300
1234     301
1234     302
1234     303

如何在 SQL 中编写代码?谢谢

【问题讨论】:

请用您正在运行的数据库标记您的问题:sql-server、postgresql、oracle...? 【参考方案1】:

您想要取消透视行到列。最佳解决方案取决于您正在运行的数据库。跨数据库的方法是union all:

select claimID, error1 as error from mytable
union all select claimID, error2 from mytable
union all select claimID, error3 from mytable
union all select claimID, error4 from mytable

在支持横向连接和values() 行构造函数的数据库中,有更好的选择,不需要多次扫描表。

在 Postgres 中:

select x.*
from mytable t
cross join lateral (values 
    (t.claimID, t.error1),
    (t.claimID, t.error2),
    (t.claimID, t.error3),
    (t.claimID, t.error4)
) as x(claimID, error)

在 SQL Server 中,您只需将 cross join lateral 替换为 cross apply

【讨论】:

是SQL服务器 @Lissette:我的回答涵盖了这一点。

以上是关于如何将列更改为行的主要内容,如果未能解决你的问题,请参考以下文章

访问 SQL - 将列更改为自动编号?

Postgresql以通用方式将列更改为行

如何在AngularJS网格中有条件地将列更改为文本框?

使用条件将列更改为单独的数据框

将列更改为可为空的查询不起作用[重复]

将旧 SQL 表中的数据插入到新表中,列更改为行