首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据拆分为多行

将数据拆分为多行
EN

Stack Overflow用户
提问于 2014-04-22 17:03:59
回答 3查看 105关注 0票数 0

我正在从存储在MSSQL 2012数据库中的遗留系统中提取客户数据。在此表中,使用Name_1和Name_2字段将夫妇保存在单个客户代码下。看起来是这样的:

代码语言:javascript
复制
ID      |   Name_1     |      Name_2     |     Address
-----      --------          ---------        ---------
DOE001  | John Doe     |   Jane Doe      |  1234 Somewhere St.

我们的新系统需要把这些信息分开。它们是单独的记录,具有相同的ID,但是有一个名为"Address“的区分字段。我正在寻找一种将信息拆分的方法,如下所示:

代码语言:javascript
复制
    Customer ID     |   Name      |     Address        |     Address ID
   -----------         -------         ----------        --------------
       DOE001       |   John Doe  | 1234 Somewhere St  |       01
       DOE001       |   Jane Doe  | 1234 Somewhere St  |       02

我希望能有任何帮助来生成一个查询,该查询可以将信息分成多个行,并在可能的情况下生成新的地址ID。对于每个新的客户ID,地址ID将从01开始,然后在需要时增加。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-22 17:07:49

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2014-04-22 17:17:08

试试看,假设您只有2个name字段,

代码语言:javascript
复制
SELECT v.*
FROM t
CROSS APPLY
(
  VALUES (id, name_1, Address,'01'), (id, name_2, Address, '02')
) 
v (id, name, Address, Address_id)

SQL演示

票数 1
EN

Stack Overflow用户

发布于 2014-04-22 20:15:28

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23225910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档