如果之前有人问过这个问题,我提前道歉。
我有两张 table 。表一有三列CustomerID、SequenceNum、Value
,表二有大量列。我想用表一的值逐列而不是按行填充表二的列。
一个例子:
------------------------------------
| CustomerID | SequenceNum | Value |
------------------------------------
| 1 | 1 | A |
------------------------------------
| 1 | 2 | B |
------------------------------------
| 1 | 3 | C |
------------------------------------
| 2 | 1 | Q |
------------------------------------
| 2 | 2 | R |
------------------------------------
| 3 | 1 | X |
------------------------------------
变成了
---------------------------------------------------------------------
| CustomerID | PrimaryVal | OtherVal1 | OtherVal2 | OtherVal3 | ... |
---------------------------------------------------------------------
| 1 | A | B | C | NULL | ... |
---------------------------------------------------------------------
| 2 | Q | R | NULL | NULL | ... |
----------------------------------------------------------------------
| 3 | X | NULL | NULL | NULL | ... |
---------------------------------------------------------------------
本质上。表一中的每个唯一的 CustomerID
在表二中都将具有一行。特定 CustomerID
的每个 SequenceNum
将填充表二中 PrimaryVal、OtherVal1、OtherVal2 等
下的一列。 SequenceNum
等于 1 的行将填充 PrimaryVal
字段,2-18(最大序列长度为 18)将填充 OtherVal#
.
我看到的主要问题是序列中值的数量可变。有些序列可能只包含 1 行,有些序列会填满所有 18 个点,以及介于两者之间的任何内容。
任何有关如何解决此问题的建议将不胜感激。谢谢。
最佳答案
鉴于您知道最多 18 列,我会采用正常的枢轴路线。
select customerID, Pivoted.*
from Customer
pivot( Value for sequencenum in (1,2,3,4,5,6, upto 18)) as Pivoted
我在这里很懒,没有为列添加别名,但如果需要,您可以这样做。
关于sql - 获取表的行作为第二个表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31320963/