T-SQL 使用 PIVOT 函数的使用方法
T-SQL using how to use PIVOT function
我在 SQL 中有以下 table 结构(使用 T-SQL):
sqlfiddle: http://sqlfiddle.com/#!6/e5edc/1/0
数据看起来像这样:
现在我想转置结构,所以我得到以下内容:
- 列 [01_amount] 到 [12_amount] 和列 [01_active] 到 [12_active] 作为行而不是列
- 所有 [initials] 的行都是单独的列
应该是这样的:
我该怎么做? Pivot 函数看起来相当复杂,因为我是 SQL 的新手。有人可以帮助我朝着正确的方向前进吗? :-)
好的,您首先需要取消数据透视,这是在 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
我在 SQL 中有以下 table 结构(使用 T-SQL): sqlfiddle: http://sqlfiddle.com/#!6/e5edc/1/0
数据看起来像这样:
现在我想转置结构,所以我得到以下内容:
- 列 [01_amount] 到 [12_amount] 和列 [01_active] 到 [12_active] 作为行而不是列
- 所有 [initials] 的行都是单独的列
应该是这样的:
我该怎么做? Pivot 函数看起来相当复杂,因为我是 SQL 的新手。有人可以帮助我朝着正确的方向前进吗? :-)
好的,您首先需要取消数据透视,这是在 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