美文网首页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的初学者。


相关文章

  • 行列转换

    一行转多行 复制表格,然后右击鼠标选择转置复制 一列变多列 =IFERROR(OFFSET($A$2,IF(ROW...

  • SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。 行列转换就是如下...

  • Hive 行列转换

    一、列转行使用函数:lateral view explode(split(column, ',')) numSQL...

  • Shell - 行列转换

    在日常文本的处理中,我们经常会碰见行列转换的情况,以下为几种常见的行列转换命令: 方案一 基本思路:将所有内容存储...

  • SQL 行列转换

    前段时间有人问了一个问题,就是SQL的行列转换,当时有点懵没答上来,后来细细想一想,其实最近的一个项目就已经用到了...

  • MySQL行列转换

    score_1 score_2 RT,需求是将以上两种表样式互相转换: score_1转score_2,很简单: ...

  • 行列向量转换

    doc: https://docs.scipy.org/doc/numpy/reference/generated...

  • HIVE :行列转换

    举个栗子 a b 1a b 2a b 3c...

  • 行列转换1

    SELECT 年龄,MAX(IF(性别='男', v, 0)) AS 男,MAX(IF(性别='女', v, 0)...

  • SQL行列转换

    行转列1.1、case when1.2、内置函数pivot 列转行2.1、unpivot2.2、union实现

网友评论

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

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