gpt4 book ai didi

sql - 从多列中选择值到单列中

转载 作者:行者123 更新时间:2023-12-02 07:42:21 24 4
gpt4 key购买 nike

我的数据库中有一个表,其中有 9 列,其中包含相同类型的数据,这些值允许为空。我需要将每个非空值选择到一列值中,这些值不关心它们源自的行的标识。

因此,对于如下所示的表格:

+---------+------+--------+------+
| Id | I1 | I2 | I3 |
+---------+------+--------+------+
| 1 | x1 | x2 | x7 |
| 2 | x3 | null | x8 |
| 3 | null | null | null|
| 4 | x4 | x5 | null|
| 5 | null | x6 | x9 |
+---------+------+--------+------+

我希望将每个以 x 为前缀的值选择到单个列中。我的结果数据应如下表所示。需要保留顺序,因此第一行的第一列值应位于顶部,最后一行的最后一列值应位于底部:

+-------+
| value |
+-------+
| x1 |
| x2 |
| x7 |
| x3 |
| x8 |
| x4 |
| x5 |
| x6 |
| x9 |
+-------+

我正在使用SQL Server 2008 R2。有没有比从每行中依次选择每列的值并将非空值插入到结果中更好的技术来实现此目的?

最佳答案

您可以使用UNPIVOT函数得到最终结果:

select value
from yourtable
unpivot
(
value
for col in (I1, I2, I3)
) un
order by id, col;

由于您使用的是 SQL Server 2008+,因此您还可以使用带有 VALUES 子句的 CROSS APPLY 来取消透视列:

select value
from yourtable
cross apply
(
values
('I1', I1),
('I2', I2),
('I3', I3)
) c(col, value)
where value is not null
order by id, col

关于sql - 从多列中选择值到单列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19515829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com