简介
sql server 的 PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。
通俗简单的说:PIVOT就是行转列
本工具包中的 DatasPivotUtil 已经实现了此能力. 并已经接入到 SqlDdlDaoMultipleImpl 中, 从而可以用于处理任意数据源的数据.
语法说明
PIVOT(<聚合函数>(<要聚合的列>) ... FOR [<包含要成为列标题的值的列>] in( [第一个透视的列], [第二个透视的列], ... [最后一个透视的列]))包含要成为列标题的值的列>要聚合的列>聚合函数>
注:
-
聚合函数可以不唯一, 不唯一时透视列的列名将由”_“作为分隔符拼接而成
-
透视列可以不填
PIVOT实例1
-- 分组前的数据
SELECT * FROM [{a:1,b:11,c:'x'},{a:2,b:22,c:'y'},{a:3,b:33,c:'x'},{a:4,b:11,c:'y'},{a:5,b:22,c:'x'},{a:6,b:33,c:'y'}];
-- 按c分组
pivot(sum(b) FOR c in('x','y'))
返回值
[{a:1,x:11.0,y:null},
{a:2,x:null,y:22.0},
{a:3,x:33.0,y:null},
{a:4,x:null,y:11.0},
{a:5,x:22.0,y:null},
{a:6,x:null,y:33.0}]
PIVOT实例2
-- 分组前的数据
SELECT * FROM [{a:1,b:11,c:'x'},{a:2,b:22,c:'y'},{a:3,b:33,c:'x'},{a:4,b:11,c:'y'},{a:5,b:22,c:'x'},{a:6,b:33,c:'y'}];
-- 按c分组
pivot(sum(a) as a,sum(b) as b FOR c in('x','y'))
返回值
[{x_a:9.0,x_b:66.0,y_a:12.0,y_b:66.0}]