sql - 获取表的行作为第二个表中的列

标签 sql sql-server database sql-server-2012

如果之前有人问过这个问题,我提前道歉。

我有两张 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/

相关文章:

mysql - 为什么 MySQL 中外部存储的 blob 需要 20 字节的指针?

database - 将文本存储为文件或数据库更有效?

sql - SQL Server 中带有 IF 条件的 CONCAT

c# - 我可以在 SQL 中使用什么作为内部标识符?

java - 重置android数据库中的行数计数

c# - 如何处理用户代码未处理的索引超出范围异常?

java - 无法通过 Java 检索存储过程返回值

iphone - 什么被认为是iPhone应用程序的大型数据库?

sql - ORA 01114 - 将 block 写入文件的 IO 错误

mysql - SQL 错误 1241 : Operand should contain 1 column(s)