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

Sql Server中不常用的表运算符之PIVOT中,介绍了PIVOT表运算符,现在来说说与之相对应的另一个表运算符UNPIVOT。

从名字可以看出,这个运算符的作用与PIVOT刚好相反,是将一行的多个列值旋转为多行,每一行是一个原列的值。

Sql Server中不常用的表运算符之PIVOT中最后的表结果为例,来演示一下如何使用UNPIVOT运算符

上面这张表中显示了 C001,C002,C003这三个消费者在不同城市不同地区的订单数量,通过下面的查询将C001,C002,C003这三列旋转为行。

SELECT * FROM Ptable
    UNPIVOT(
        num_orders FOR 
            Customer IN (
                C001,
                C002,
                C003
            )
        ) AS U

结果如下:

而UNPIVOT也将通过3个步骤完成

1.获取副本:

这一步原表中的每一行将为IN中对应的每一列复制一次原,因为IN中有三列,所以每一行都将被复制三次。并且最后的副本还会包含一个新列num_orders,对应IN中每一列的订单数。最后的副本表如下

2.第二步:

隔离目标列值,将保留与num_orders对应的列值,并将其他的列值去掉。最后的列值保留在num_orders中。

3.第三步:

过滤掉结果列num_orders为NULL的值,因为第二步的表中num_orders列没有NULL值,所以第二步将是最后的结果。

原文地址:https://www.cnblogs.com/iiaijimaai/p/3648979.html