我正在从存储在MSSQL 2012数据库中的遗留系统中提取客户数据。在此表中,使用Name_1和Name_2字段将夫妇保存在单个客户代码下。看起来是这样的:
ID | Name_1 | Name_2 | Address
----- -------- --------- ---------
DOE001 | John Doe | Jane Doe | 1234 Somewhere St.我们的新系统需要把这些信息分开。它们是单独的记录,具有相同的ID,但是有一个名为"Address“的区分字段。我正在寻找一种将信息拆分的方法,如下所示:
Customer ID | Name | Address | Address ID
----------- ------- ---------- --------------
DOE001 | John Doe | 1234 Somewhere St | 01
DOE001 | Jane Doe | 1234 Somewhere St | 02我希望能有任何帮助来生成一个查询,该查询可以将信息分成多个行,并在可能的情况下生成新的地址ID。对于每个新的客户ID,地址ID将从01开始,然后在需要时增加。
谢谢你的帮助。
发布于 2014-04-22 17:07:49
WITH CTE AS (
SELECT ID, Name_1 AS Name, Address FROM myTable
UNION ALL
SELECT ID, Name_2 AS Name, Address FROM myTable
)
SELECT *, ROW_NUMBER() OVER (ORDER BY ID, Name, Address) AS [Address ID] FROM CTE首先,它将每一行选择为两行,在名称上拆分。接下来,它根据按(本例中的) ID, Name, Address升序排序生成一个唯一的ID, Name, Address。
发布于 2014-04-22 17:17:08
试试看,假设您只有2个name字段,
SELECT v.*
FROM t
CROSS APPLY
(
VALUES (id, name_1, Address,'01'), (id, name_2, Address, '02')
)
v (id, name, Address, Address_id)SQL演示
发布于 2014-04-22 20:15:28
CREATE TABLE #temp
(ID VARCHAR(10), Name_1 VARCHAR(100), Name_2 VARCHAR(100), [Address] VARCHAR(100))
INSERT INTO #temp
VALUES ('DOE001', 'John Doe', 'Jane Doe', '1234 Somewhere St.')
SELECT
ID AS CustomerID
, Name
, [Address]
, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS AddressID
FROM #temp
UNPIVOT (Name FOR ContactName IN (Name_1, Name_2)) AS Names我喜欢UNPIVOT的方法。
这是一个链接到一个帖子,解释如何使用UNPIVOT。http://weblogs.sqlteam.com/jeffs/archive/2008/04/23/unpivot.aspx
https://stackoverflow.com/questions/23225910
复制相似问题