sql-server - 如何将前 5 行旋转/转置为列

标签 sql-server tsql pivot pivot-table

我以前使用过 Pivot,但我似乎可以让它在这个特定的数据集上工作。也许是因为我试图同时获得前 5 个结果和枢轴。

这是我的数据示例(请注意,月份将保持不变,因为我事先这样做了):

City            # Of Accidents    Month
----            --------------    -----
Los Angeles     23                June
New York        36                June
Denver          14                June
Memphis         18                June
Orlando         25                June

我希望我的结果如下所示(月份,根据事故数量为每个排名靠前的城市有一列):

Month    TopCity1    TopCity2    TopCity3      TopCity4    TopCity5
-----    --------    --------    --------      --------    --------
June     New York    Orlando     Los Angeles   Memphis     Denver

提前致谢!

最佳答案

另一个选项是与 Row_Number() 配合使用的 PIVOT

示例

Select *
 From (
        Select Month
              ,City
              ,Col = concat('TopCity',Row_Number() over (Partition By Month Order By [# Of Accidents] Desc) )
         From  YourTable
      ) Src
 Pivot (max(City) for Col in (TopCity1,TopCity2,TopCity3,TopCity4,TopCity5) ) p

返回

Month   TopCity1    TopCity2    TopCity3        TopCity4    TopCity5
June    New York    Orlando     Los Angeles     Memphis     Denver

关于sql-server - 如何将前 5 行旋转/转置为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135530/

相关文章:

mysql - SQL Server 相当于 MySQL 多主复制?

sql - sql tsql 中的毫秒

sql - 如何使用 T-SQL "pick"随机记录

.net - SQL错误 "Subquery returned more than 1 value..."在SqlClient中不会引发异常

sql - 在 SQL Server 中使用 'Pivot' 将行转换为列

apache-spark - 如何在 PySpark DataFrame 中将列转置为行?

sql-server - 在 Apache Spark 中加入流数据

sql-server - 如何在存储过程中实现 sql 搜索功能 (Sql Server 2008)

sql - 如何在数据透视中为列提供自定义名称

mysql - 在 where 子句中使用多个条件的缺点