取消旋转具有多个(非规范化)值的多个重复列

Unpivoting multiple, repeated columns with multiple (denormalized) values

我有一个 table 有多个这样的列...

+-------+----------------+---------+---------+-----------+------------+-----------+-----------+------------+---------+-----------+------------+
| Name  |     Email      | Address | Order1  | Shipping1 |   Date1    |  Order2   | Shipping2 |   Date2    | Order3  | Shipping3 |   Date3    |
+-------+----------------+---------+---------+-----------+------------+-----------+-----------+------------+---------+-----------+------------+
| John  | john@abcd.com  |     123 | Rock    |       123 | 02/11/2017 | Computer  |       123 | 07/11/2017 | Pen     |       123 | 12/11/2017 |
| Jane  | jane@abcd.com  |     234 | Scissor |       234 | 03/11/2017 | Laptop    |       234 | 08/11/2017 | Pencil  |       234 | 13/11/2017 |
| Julie | julie@abcd.com |     345 | Paper   |       345 | 04/11/2017 | Mouse     |       345 | 09/11/2017 | Clips   |       345 | 14/11/2017 |
| Jaden | jaden@abcd.com |     456 | Spock   |       456 | 05/11/2017 | Screen    |       456 | 10/11/2017 | Pins    |       456 | 15/11/2017 |
| Jabba | jabba@abcd.com |     678 | Lizard  |       678 | 06/11/2017 | Pen Drive |       678 | 11/11/2017 | Notepad |       678 | 16/11/2017 |
+-------+----------------+---------+---------+-----------+------------+-----------+-----------+------------+---------+-----------+------------+

而且我想在 T-SQL...

中像这样将列逆透视为行
+-------+----------------+---------+-----------+----------+------------+
| Name  |     Email      | Address |   Order   | Shipping |    Date    |
+-------+----------------+---------+-----------+----------+------------+
| John  | john@abcd.com  |     123 | Rock      |      123 | 02/11/2017 |
| John  | john@abcd.com  |     123 | Computer  |      123 | 07/11/2017 |
| John  | john@abcd.com  |     123 | Pen       |      123 | 12/11/2017 |
| Jane  | jane@abcd.com  |     234 | Scissor   |      234 | 03/11/2017 |
| Jane  | jane@abcd.com  |     234 | Laptop    |      234 | 08/11/2017 |
| Jane  | jane@abcd.com  |     234 | Pencil    |      234 | 13/11/2017 |
| Julie | julie@abcd.com |     345 | Paper     |      345 | 04/11/2017 |
| Julie | julie@abcd.com |     345 | Mouse     |      345 | 09/11/2017 |
| Julie | julie@abcd.com |     345 | Clips     |      345 | 14/11/2017 |
| Jaden | jaden@abcd.com |     456 | Spock     |      456 | 05/11/2017 |
| Jaden | jaden@abcd.com |     456 | Screen    |      456 | 10/11/2017 |
| Jaden | jaden@abcd.com |     456 | Pins      |      456 | 15/11/2017 |
| Jabba | jabba@abcd.com |     678 | Lizard    |      678 | 06/11/2017 |
| Jabba | jabba@abcd.com |     678 | Pen Drive |      678 | 11/11/2017 |
| Jabba | jabba@abcd.com |     678 | Notepad   |      678 | 16/11/2017 |
+-------+----------------+---------+-----------+----------+------------+

我用谷歌搜索并检查了与此相关的其他帖子,但无法获得三个值。 :(

感谢帮助!

你根本不需要在这里使用 UNPIVOT

您将能够将三个非规范化订单 UNION 回到扁平化输出中,如下所示:

SELECT name, Email, Address, Order1 AS Order, Shipping1 as Shipping, Date1 AS Date
FROM Table1
UNION ALL
SELECT name, Email, Address, Order2, Shipping2, Date2
FROM Table1
UNION ALL
SELECT name, Email, Address, Order3, Shipping3, Date3
FROM Table1
ORDER BY Name, Date;

SqlFiddle here

(列名由UNION中的第一个select设置,ORDER应用于最后的UNIONed数据)