sql - 如何将所有文本行值转换为 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
解决方案
这有点棘手,因为当每个城市有多个客户时,您想为每个销售人员创建几行。一种方法首先枚举子查询中的行,然后聚合:
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
推荐阅读
- php - 在 https 上托管 xampp
- replace - Pine Script 有替代或替换功能吗?
- c# - 使用多线程持续更新 UWP UI 元素(Windows 10 IoT Core)
- string - Powershell,如何通过 pscustomobject 或有序的列获取 csv?
- java - Spring Boot 缓存注解在使用 Redis 进行缓存的应用程序中的作用是什么?
- spring-boot - 如何在使用 gradle 创建多个子模块的可执行 jar 时排除子模块?
- node.js - NODE.JS(TYPESCRIPT) 类型“NodeModule”上不存在属性“req”
- swift - 用贝塞尔路径绘制动态蜘蛛图
- database - 如何实现自己的设置到 Scrapy 蜘蛛
- ios - iphone 设备模拟器上看不到按钮的文本