首页 > 解决方案 > 如何将所有文本行值转换为 SQL Server 中的列

问题描述

我在所有文本中都有关于每个销售员的客户和城市的数据。看起来像

Salesman|customer_name|City
Adam| Alex|New york
Adam|Kevin|New york
Adam|Erin|Chicago
Adam|Jim|Los Angeles
Adam|James|New York
Pam|Tod|New York
Pam|Kelly|Chicago
Pam|Rick|Chicago
Lewis|David|Los Angeles
Lewis|Mike|Los Angeles

我需要转置 city 列以按城市获取销售人员的客户名称,这在 SQL Server 中应该看起来像。我不确定我是否可以在 Pivot 中执行此操作,或者是否有其他选项

Salesman|New york|Chicago|Los Angeles
Adam|Alex|Erin|Jim
Adam|Kevin|NULL|NULL
Adam|James|NULL|NULL
Pam|Tod|Kelly|NULL
Pam|NULL|Rick|NULL
Lewis|NULL|NULL|David
Lewis|NULL|NULL|Mike

标签: sqlsql-servertsqlpivotwindow-functions

解决方案


这有点棘手,因为当每个城市有多个客户时,您想为每个销售人员创建几行。一种方法首先枚举子查询中的行,然后聚合:

select salesman, 
    max(case when city = 'New York' then customer_name end) new_york,
    max(case when city = 'Chicago' then customer_name end) chicago,
    max(case when city = 'Los Angeles' then customer_name end) los_angeles,
from (
    select t.*, row_number() over(partition by salesman, city order by customer_name) rn
    from mytable t
) t
group by salesman, rn

推荐阅读