我必须从一个结构如下的表中创建一个包含联系人列表(ClientCode、Telephone、Name)的表:
| 客户代码|电话1|姓名1|电话2|姓名2|电话3|姓名3|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 1234|小行星55555|约翰·M.|小行星79879|法兰克|小行星897987|保罗|
| 小行星9884|小行星84416|理查德德|小行星88416|海伦|小行星11594|卡特林|
我需要按ClientCode对在同一客户端工作的相同人员进行分组。
预期表:
| 客户代码|电话|姓名|
| - ------|- ------|- ------|
| 1234|小行星55555|约翰·M.|
| 1234|小行星79879|法兰克|
| 1234|小行星897987|保罗|
| 小行星9884|小行星84416|理查德德|
| 小行星9884|小行星88416|海伦|
| 小行星9884|小行星1159|卡特林|
我尝试了以下解决方案(来自this答案),但输出不正确
SELECT UNPVTBL.CLIENTCODE, UNPVTBL.NAME
FROM (SELECT * FROM -ORIGIN_TABLE-) P
UNPIVOT
(NAME FOR CONTACTS IN
(NAME1, NAME2, NAME3)
)UNPVTBL
UNION
SELECT UNPVTBL.CLIENTCODE, UNPVTBL.TELEPHONE
FROM (SELECT * FROM -ORIGIN_TABLE-) G
UNPIVOT
(TELEPHONE FOR TELEPH IN
(TELEPHONE1, TELEPHONE2, TELEPHONE3)
)UNPVTBL
3条答案
按热度按时间js4nwp541#
您可以尝试使用
UNION ALL
运算符执行此操作:输出:
| 客户代码|电话|姓名|
| - ------|- ------|- ------|
| 1234|小行星55555|约翰·M.|
| 小行星9884|小行星84416|理查德德|
| 1234|小行星79879|法兰克|
| 小行星9884|小行星88416|海伦|
| 1234|小行星897987|保罗|
| 小行星9884|小行星11594|卡特林|
检查here演示。
l7wslrjt2#
一种方法是将值反透视:
owfi6suc3#
至于解决方案,
VALUES
表构造似乎可以很简单地完成此操作: