我在数据库中有一个表,它有 9 列包含相同类型的数据,这些值允许为 null。我需要将每个非空值选择到单个值列中,这些值不关心它们源自的行的身份。
所以,对于一个看起来像这样的表:
+---------+------+--------+------+
| 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。是否有比从每一行依次选择每一列的值并将非空值插入结果更好的技术来实现这一点?