Sql Server中不经常使用的表运算符之UNPIVOT

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值,因此第二步将是最后的结果。

相关文章
相关标签/搜索