查找T-SQL以通过块转置表

时间:2014-04-09 16:36:33

标签: sql-server tsql pivot

我正在寻找使用T-SQL做到这一点的最干净,最简单,最简单,最有效的方法。我希望单一的方式就是所有这些,但我意识到它可能不是。

我尝试过使用PIVOT(但没有成功),但我认为我需要的是通过块进行PIVOT而不进行聚合

我查询了一个大表来获得这个结果: (结果按年份按数字递减排序。数字是在给定年份中出生时具有该名称的人数)

Name    Number  Year
John    9655    1880
William 9532    1880
James   5927    1880
Charles 5348    1880
George  5126    1880
John    8769    1881
William 8524    1881
Charles 5442    1881
George  4664    1881
James   4636    1881
John    9557    1882
James   9298    1882
William 5892    1882
George  5193    1882
Charles 5092    1882

我想将上述结果转化为:

1880    1881    1882
John    John    John
William William James
James   Charles William
Charles George  George
George  James   Charles

1 个答案:

答案 0 :(得分:1)

您可以使用PIVOT获取结果,您唯一需要做的就是添加row_number(),该year是按number排序的max分区数据生成的。这个唯一序列允许您在应用聚合函数时每年返回多行。此外,由于您要转换字符串数据,您需要使用minselect [1880], [1881], [1882] from ( select name, year, row_number() over(partition by year order by number desc) seq from yourtable ) d pivot ( max(name) for year in ([1880], [1881], [1882]) ) p; 聚合函数:

|    1880 |    1881 |    1882 |
|---------|---------|---------|
|    John |    John |    John |
| William | William |   James |
|   James | Charles | William |
| Charles |  George |  George |
|  George |   James | Charles |

SQL Fiddle with Demo。返回:

{{1}}