|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。在SqlServer的匡助文档中,对Pivot函数是如许注释的:
可使用PIVOT和UNPIVOT干系运算符对表值表达式举行操纵以取得另外一个表。PIVOT经由过程将表达式某一列中的独一值转换为输入中的多个列来转换表值表达式,并在需要时对终极输入中所需的任何其他的列值实行聚合.
对第一次利用PIVOT函数的伴侣来讲,如许的注释很难让人人了解,上面编纂用PIVOT函数来完成一个行转列的功效,以便让读者更简单了解该函数.
注重:PIVOT是SqlServer2005的新函数,2005前行转列请参看本站:
SQLServer中(行列转换)行转列及列转行且加均匀值及汇总值
先创立一个人为表:
CreateTableSalary
(
HrNamevarchar(50),
Monthlyvarchar(50),
Moneymoney
)
往表中拔出数据:
insertintoSalary(HrName,Monthly,[Money])
select张三,一月,3000
unionall
select张三,仲春,3200
unionall
select张三,三月,3500
unionall
select李四,一月,3800
unionall
select李四,仲春,4200
unionall
select李四,三月,3900
unionall
select张三,一月,2000
检察一般的数据:
select*fromSalary
了局:
HrNameMonthlyMoney
张三一月3000.00
张三仲春3200.00
张三三月3500.00
李四一月3800.00
李四仲春4200.00
李四三月3900.00
张三一月2000.00
检察行转列后的数据:
selectHrNameas姓名,[一月],[仲春],[三月]fromSalary
pivot(sum([Money])forMonthlyin([一月],[仲春],[三月]))aspvt
了局:
姓名一月仲春三月
李四3800.004200.003900.00
张三5000.003200.00500.00
注重:
pivot(sum([Money])forMonthlyin([一月],[仲春],[三月]))中的sum([Money]),这里必需是聚合函数,好比是min,max等。
in([一月],[仲春],[三月])中的[一月],[仲春],[三月]即为Monthly的Value,又为新了局集的列名.
假如我们将个中的一月改成四月,由于数据源中没有四月的纪录,以是四月查询出来应当为Null.
测试:
selectHrNameas姓名,[四月],[仲春],[三月]fromSalary
pivot(sum([Money])forMonthlyin([四月],[仲春],[三月]))aspvt
了局:
姓名四月仲春三月
李四NULL4200.003900.00
张三NULL3200.003500.00
以上为编纂团体了解小结,仅作参考!因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。 |
|