在Sql Server中不经常使用的表运算符之PIVOT中,介绍了PIVOT表运算符,如今来讲说与之相对应的另外一个表运算符UNPIVOT。html
从名字能够看出,这个运算符的做用与PIVOT恰好相反,是将一行的多个列值旋转为多行,每一行是一个原列的值。spa
以Sql Server中不经常使用的表运算符之PIVOT中最后的表结果为例,来演示一下如何使用UNPIVOT运算符code
上面这张表中显示了 C001,C002,C003这三个消费者在不一样城市不一样地区的订单数量,经过下面的查询将C001,C002,C003这三列旋转为行。htm
SELECT * FROM Ptable UNPIVOT( num_orders FOR Customer IN ( C001, C002, C003 ) ) AS U
结果以下:blog
而UNPIVOT也将经过3个步骤完成get
1.获取副本:table
这一步原表中的每一行将为IN中对应的每一列复制一次原,由于IN中有三列,因此每一行都将被复制三次。而且最后的副本还会包含一个新列num_orders,对应IN中每一列的订单数。最后的副本表以下class
2.第二步:im
隔离目标列值,将保留与num_orders对应的列值,并将其余的列值去掉。最后的列值保留在num_orders中。查询
3.第三步:
过滤掉结果列num_orders为NULL的值,由于第二步的表中num_orders列没有NULL值,因此第二步将是最后的结果。