我以前使用过 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/

10-13 06:23