美文网首页BI学习笔记
BI-SQL丨行列转换

BI-SQL丨行列转换

作者: Fabric丨白茶 | 来源:发表于2023-06-16 20:18 被阅读0次

    行列转换
    行列转换,在SQL Server中属于常见的基本操作。无论是搭建数仓,还是通过PowerBI进行数据分析,我们总会接触到各式各样的数据源,而在这些数据源中,除了标准的大型数仓外,我们很少能够拿到标准规范的数据表结构。
    接触最多的,往往是大宽表,这就需要我们将大宽表转换为标准的二维表结构,即实现表结构的降维操作,也就是PowerBI中的透视功能。
    函数介绍

    PIVOT语法:

    PIVOT (
      < 聚合函数 >(要聚合的列) FOR < 转换的列 > IN (转换的列的值列表)
    ) AS 转换后的表名
    

    UNPIVOT语法:

    UNPIVOT (
      < 聚合函数 >(要聚合的列) FOR < 转换的列 > IN (转换的列的值列表)
    ) AS 转换后的表名
    

    PIVOT函数,通常用来将表结构从二维表转换为大宽表,而UNPIVOT则恰恰相反,通常是用来将大宽表转换为二维表。
    使用实例

    案例数据:

    在白茶的本机数据库中,存在名为CaseData的数据库,存在名为“Test1”的二维表和名为“Test2”大宽表。
    例子1:
    将二维表,转换为大宽表。

    SELECT
        *
    FROM
        Test1 PIVOT (
            SUM(Sales) FOR Product IN (女装, 男装, 童装, 鞋子, 裤子)
        ) AS NewTable
    

    结果如下:

    当然,除了PIVOT函数以外,我们还可以使用常规的计算方法。

    SELECT
        日期,
        SUM(
            CASE
                WHEN Product = N'女装' THEN Sales
                ELSE 0
            END
        ) AS '女装',
        SUM(
            CASE
                WHEN Product = N'男装' THEN Sales
                ELSE 0
            END
        ) AS '男装',
        SUM(
            CASE
                WHEN Product = N'童装' THEN Sales
                ELSE 0
            END
        ) AS '童装',
        SUM(
            CASE
                WHEN Product = N'鞋子' THEN Sales
                ELSE 0
            END
        ) AS '鞋子',
        SUM(
            CASE
                WHEN Product = N'裤子' THEN Sales
                ELSE 0
            END
        ) AS '裤子'
    FROM
        Test1
    GROUP BY
        日期
    

    结果如下:

    例子2:
    将大宽表,转换为二维表。

    SELECT
        *
    FROM
        Test2 UNPIVOT (
            Sales FOR Product IN (女装, 男装, 童装, 鞋子, 裤子)
        ) AS NewTable
    

    结果如下:

    同理,除了UNPIVOT函数以外,列转行也是有其他办法的。

    SELECT
        日期,
        N'女装' AS "Product",
        女装 AS Sales
    FROM
        Test2
    UNION
    SELECT
        日期,
        N'男装' AS "Product",
        男装 AS Sales
    FROM
        Test2
    UNION
    SELECT
        日期,
        N'童装' AS "Product",
        童装 AS Sales
    FROM
        Test2
    UNION
    SELECT
        日期,
        N'鞋子' AS "Product",
        鞋子 AS Sales
    FROM
        Test2
    UNION
    SELECT
        日期,
        N'裤子' AS "Product",
        裤子 AS Sales
    FROM
        Test2
    

    结果如下:

    这里是白茶,一个PowerBI的初学者。


    相关文章

      网友评论

        本文标题:BI-SQL丨行列转换

        本文链接:https://www.haomeiwen.com/subject/qtvzfdtx.html