繁体   English   中英

如何使用一个表中的值作为 SQL 服务器中新表中的列名?

[英]How to use values from one table as column names in a new Table in SQL SERVER?

我有一个看起来像这样的表:

员工姓名 城市
玛丽亚 芝加哥
约翰 芝加哥
安娜 洛杉矶
彼得 洛杉矶
嘉莉 纽约市

我需要创建一个如下所示的表:

芝加哥 洛杉矶 纽约市
玛丽亚 安娜 嘉莉
约翰 彼得

我找到了这个

SELECT (ColumnNames)  
FROM (TableName)  
PIVOT
(  
 AggregateFunction(ColumnToBeAggregated)
  FOR PivotColumn IN (PivotColumnValues)
) AS (Alias);   

但是我很困惑要使用哪个聚合 function,因为这些值不是数字,而且我的表中有太多城市无法手动写入。

您可以添加一个新列 PIVOT。 在这个简单的例子中,我使用了 window function dense_rank() over()

结果

Declare @YourTable Table ([EmployeeName] varchar(50),[City] varchar(50))  Insert Into @YourTable Values 
 ('Maria','Chicago')
,('John','Chicago')
,('Anna','LA')
,('Peter','LA')
,('Carrie','NYC')
 

Select  *
 From  (
        Select EmployeeName
              ,City
              ,RN = dense_rank() over (partition by city order by EmployeeName desc) 
         From @YourTable
       ) src
 Pivot ( max(EmployeeName) for City in ( [Chicago],[LA],[NYC]) )pvt

结果

RN  Chicago LA      NYC
1   Maria   Peter   Carrie
2   John    Anna    NULL

更新-动态方法

Declare @SQL varchar(max) = '
Select  *
 From  (
        Select EmployeeName
              ,City
              ,RN = dense_rank() over (partition by city order by EmployeeName desc) 
         From YourTable
       ) src
 Pivot ( max(EmployeeName) for City in ( '+ (Select string_agg(quotename(City),',') From  (Select distinct City from YourTable) A) +' ) )pvt
'
Exec(@SQL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM