T-SQL使用如何使用PIVOT功能

时间:2015-06-14 18:58:05

标签: sql sql-server pivot

我在SQL中有以下表结构(使用T-SQL): sqlfiddle:http://sqlfiddle.com/#!6/e5edc/1/0

数据看起来像这样:

enter image description here

现在我想转置结构,以便我得到以下内容:

  • 列[01_amount]至[12_amount]和列[01_active]至[12_active] 为行而非列
  • [姓名缩写]的所有行都是单独的列

应该是这样的:

enter image description here

我该怎么做?由于我是SQL的新手,Pivot函数看起来相当复杂。有人可以帮我正确的方向吗? : - )

1 个答案:

答案 0 :(得分:2)

好的,首先需要取消您的数据,这是在cte中完成的。然后你需要再次转动:

;with cte as(select initials, v, col from main
unpivot(v for col in([01_amount], [02_amount])) u)
select * from cte
pivot(max(v) for initials in([rw],[nb]))p

在unpivot部分,只需为金额和有效位添加所有24个列名称。在枢轴部分中,只需为首字母添加所有可能的值。

但是,如果您不想手动列出所有可能的首字母值,那么您需要通过忽略和旋转来进行一些动态查询。

以下是2列的演示,您可以轻松展开它http://sqlfiddle.com/#!6/4cf36/2