BI-SQL丨行列转换

2023-11-17

行列转换
行列转换,在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的初学者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BI-SQL丨行列转换 的相关文章

  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • FireDac 添加下划线 1 以区分具有相同名称的 2 个列名

    我有一个连接 2 个表的选择 因此这些表中存在具有相似名称的列 因此现在在检索结果时 FireDac 将下划线 1 添加到第二个列名称以区分这两个表 Select from Table1 inner join Table2 on Table
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • 查询获取每条记录的最小日期[重复]

    这个问题在这里已经有答案了 我想获取表中每条记录的最小日期 该表具有多个带有一个主键的日期条目 看看我的桌子 CaseNo Entry date ABC 001 2 12 13 ABC 002 2 09 13 ABC 001 1 01 13
  • 不能简单地使用 PostgreSQL 表名(“关系不存在”)

    我正在尝试运行以下 PHP 脚本来执行简单的数据库查询 db host localhost db name showfinder username user password password dbconn pg connect host
  • MySQL Tinybit(1) 通过视图的列

    我有一个连接 2 个表的视图 其中一个表具有表示布尔值的tinyint 1 类型的列 该表在连接时并不总是有条目 因此当行丢失时视图需要采用 0 false 值 我希望视图公开 TINYINT 1 类型且 NOT NULL 类型的列 因为它
  • MySQL通过UPDATE/DELETE合并重复数据记录

    我有一个看起来像这样的表 mysql gt SELECT FROM Colors ID USERNAME RED GREEN YELLOW BLUE ORANGE PURPLE 1 joe 1 null 1 null null null 2
  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • SQL Server 2008 中的全文搜索一步一步

    如何开始使用SQL Server 2008 中的全文搜索 阅读这些链接 SQL SERVER 2008 创建全文目录和全文搜索 http blog sqlauthority com 2008 09 05 sql server creatin
  • 获取从开始日期到结束日期的活跃周数

    我的订阅数据如下所示 数据显示用户何时购买订阅 它有user id subscription id start date and end date 我已经得出wk start and wk end从中 user subscription i
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • 更高效的 LINQ 查询

    有人可以帮我将此查询循环变成高效的 Linq 查询吗 我将其加载到 TreeView 中 因此必须附加每个项目 包含也非常低效 延迟加载项目也不起作用 事实上 这个查询访问数据库的次数比应有的要多 public IQueryable
  • PostgreSQL WHERE 计数条件

    我在 PostgreSQL 中有以下查询 SELECT COUNT a log id AS overall count FROM Log as a License as b WHERE a license id 7 AND a licens
  • LEFT JOIN 比 INNER JOIN 快得多

    我有一张桌子 MainTable 有超过 600 000 条记录 它通过第二个表连接到自身 JoinTable 在父 子类型关系中 SELECT Child ID Parent ID FROM MainTable AS Child JOIN
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都
  • 如何重置 SQL Server 中表的 IDENTITY 列? [复制]

    这个问题在这里已经有答案了 我怎样才能重置我的IDENTITY我已经填充的表中的列 我尝试过类似的方法 但它不起作用 WITH TBL AS SELECT ROW NUMBER OVER ORDER BY profile id AS RN
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI

随机推荐

  • 【最新最详细】SQL Server 2019 安装教程

    最新最详细 SQL Server 2019 安装教程 引言 今天又双叒搞新电脑的环境 对于我这个 Net程序员 那就肯定离不开安装 SQL Server 了 网上没有找到很详细的教程 所以决定自己再写一份 下面直接进入主题 下载SQL Se
  • 基于 Matlab 的 RLS 算法进行时间序列预测

    基于 Matlab 的 RLS 算法进行时间序列预测 时间序列分析在许多领域中都具有重要的应用价值 例如金融 经济 气象等 时间序列预测是其中的一个关键问题 其目的是根据过去一段时间的观测值来预测未来一段时间的值 在本文中 我们将介绍如何使
  • Vue中安装less-loader报错处理

    Vue中使用less 需要安装less loader 1 安装命令 npm install less loader 需要注意的是less loader版本需要和webpack版本对应 版本不对会报错 webpack 4 使用 less lo
  • 【ML on Kubernetes】第 10 章:构建、部署和监控模型

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 从主机备份ubuntu到虚拟机的坑

    系统用的是16 04 1 备份过程 直接采用这个方法 不过我是直接用的镜像 data放在U盘 没有做成启动U盘 参考链接1 问题就来了 直接挂载镜像使用的是CD ROM 可能出现权限问题无法修改 记住要提前把必要的文件保存在虚拟机的系统下
  • Python自动化测试专栏——选择元素基本方法之CSS选择器

    CSS选择器选择元素 1 根据 tag名选择元素 选择 所有的tag名为div的元素 wd find elements by css selector div 2 根据id属性选择元素 wd find element by css sele
  • tensorflow如何更新到最新的版本

    背景 前面在anaconda中使用tensorflow时 在深度学习目标检测的那方面出现了问题 提示 no op 当你在百度上百度这个错误的时候 很多的CSDN博主会告诉你是因为你的tensorflow版本过低 准备 那就是更新tensor
  • MySQL——习题:每个部门当前员工最高薪水

    有一个员工表dept emp简况如下 有一个薪水表salaries简况如下 获取所有部门中员工薪水最高的相关信息 给出dept no emp no以及其对应的salary 按照部门编号升序排列 以上例子输出如下 解法1 SELECT d1
  • 移植Qt4.8.4项目到QT5.2上时遇到的一些问题

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 问题1 Qt 5 2 使用原来的QT4 8 4项目时QWebView QWebFrame等类无法编译通过 出现原因 QWebView QWebFrame QWebPage
  • OJ: 蛇形矩阵 螺旋矩阵

    题目描述 题目说明 在一个N N的方阵中 填入1 2 N共N个数 并要求构成如下的格式 N lt 10 例 输入描述 多组数据 每行读入一个N 输出描述 对应输出N N的蛇形矩阵 每个数字占3格子 每个蛇形矩阵之间用空行分割 输入样例 3
  • 【Git】git pull总是要输入账号和密码

    git config global credential helper store 之后再次执行git push 或者git pull这时候只需要在输入一次用户名和密码下次就不需要了 这个命令则是在你的本地生成一个账号密码的记录 这样就不用
  • Python中执行MySQL语句, 遇到同时有单引号, 双引号处理方式 !r, repr()

    SQL语句 insert cmd INSERT INTO 0 SET 1 format db conn firmware info table join 0 1 r format k str v for k v in info dict i
  • linux读取按行读写文本文件

    include
  • 迪杰斯特拉算法浅析

    所谓的迪杰斯特拉算法 就是一个用来求一个图中某点到其它点的最短路径的算法 大致方法 遍历所有节点 找到离起点最近的一个点 那么这个点到起点的最小距离肯定是起点到这个点的这条边的权值 然后标记这个点被使用过了 以1中的那个点为中继 更新其它节
  • 进程和线程的区别

    简介 进程 进程是计算机中运行程序的实例 是操作系统进行资源分配和调度的基本单位 每个进程都有独立的内存空间和系统资源 不同进程之间相互独立 彼此不能直接访问对方的内存 进程之间的通信需要通过操作系统提供的特定机制 如管道 共享内存等 个人
  • nginx 之安全配置

    前言 看官网官网 一 控制并发连接数 1 在默认发布目录新建一个目录并保存一张图片 传送文件到server1 打开浏览器就能看到图片 2 测试 查看日至情况 cat usr local nginx logs access log http状
  • 时间计时android程序,Android实现时间倒计时功能

    本文实例为大家分享了Android实现时间倒计时功能展示的具体代码 供大家参考 具体内容如下 效果展示 MainActivity 主页面代码 public class MainActivity extends Activity privat
  • Nacos配置中心落地与实践

    一 背景 目前 我们公司各团队配置中心使用各异 电商使用的是 Spring Cloud Config 支付使用的是 Apollo APP 团队使用的是 Apollo Nacos 为了更好地应对公司业务的发展 统一基础设施技术栈必不可少 图片
  • ChatGPT-Next-Web:Vercel 和 Cloudflare 的快速部署

    项目地址 GitHub Chanzhaoyu chatgpt web 用 Express 和 Vue3 搭建的同时支持 openAI Key 和 网页 accessToken 的 ChatGPT 演示网页 依赖安装 1 安装node cur
  • BI-SQL丨行列转换

    行列转换 行列转换 在SQL Server中属于常见的基本操作 无论是搭建数仓 还是通过PowerBI进行数据分析 我们总会接触到各式各样的数据源 而在这些数据源中 除了标准的大型数仓外 我们很少能够拿到标准规范的数据表结构 接触最多的 往