SQL Server将一列拆分为多列
我试图将一列数据拆分为多列(必要时介于1和5之间),因为其他列中的数据相同。SQL Server将一列拆分为多列,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我试图将一列数据拆分为多列(必要时介于1和5之间),因为其他列中的数据相同。 这是一个查询后我的数据示例: FirstName LastName StreetName StreetNumber AccountNumber John Smith Fake St 123 10 John Smith Fake St 123 20 John
这是一个查询后我的数据示例:
FirstName LastName StreetName StreetNumber AccountNumber
John Smith Fake St 123 10
John Smith Fake St 123 20
John Smith Fake St 123 30
John Smith Fake St 123 40
这是基于同一地址的同一个人可以有多个帐户,最多5个。我需要的结果是:
FirstName LastName StreetName StreetNumber AccountNumber1 AccountNumber2 AccountNumber3 AccountNumber4 AccountNumber5
John Smith Fake St 123 10 20 30 40 NULL
因此,我需要根据名称/地址相同的条件将accountNumber列拆分为多个列。我只想创建5个新列,任何空字段都是空值。有人能帮忙吗?您可以使用简单的pivot:
with cte as (
select
*,
'AccountNumber' +
cast(
row_number()
over(
partition by [FirstName], [LastName], [StreetName], [StreetNumber]
order by AccountNumber
)
as nvarchar(max)) as rn
from Table1
)
select *
from cte
pivot (
max(AccountNumber)
for rn in (
[AccountNumber1],
[AccountNumber2],
[AccountNumber3],
[AccountNumber4],
[AccountNumber5]
)
) as p;
或者您可以用手转动轴:
with cte as (
select
*,
row_number()
over(
partition by [FirstName], [LastName], [StreetName], [StreetNumber]
order by AccountNumber
) as rn
from Table1
)
select
[FirstName], [LastName], [StreetName], [StreetNumber],
max(case when rn = 1 then AccountNumber end) as AccountNumber1,
max(case when rn = 2 then AccountNumber end) as AccountNumber2,
max(case when rn = 3 then AccountNumber end) as AccountNumber3,
max(case when rn = 4 then AccountNumber end) as AccountNumber4,
max(case when rn = 5 then AccountNumber end) as AccountNumber5
from cte
group by [FirstName], [LastName], [StreetName], [StreetNumber]