UNPIVOT的应用

本文详细介绍了SQL中的UNPIVOT操作,通过一个具体的结果集转换示例,展示了如何使用UNPIVOT将数据从列转换为行。内容包括UNPIVOT的语法和其在数据转换中的作用,特别是在数据分析和报告生成中的实用价值。

UNPIVOT的应用

select distinct NO,YEAR,MONTH,budgetversion,ISNULL(Sales,0) AS Sales,

getImport_History where YEAR=YEAR(GETDATE())

结果集在这里插入图片描述
select *
from (结果集)A
UNPIVOT(
Budget_Amount(要取值) for attribute(要取字段) in(
[Sales]

,Trade
)
) as upv

在这里插入图片描述

-- 客户表 CREATE TABLE customers1 ( customer_id NUMBER PRIMARY KEY, name VARCHAR2(100) NOT NULL, age NUMBER(3), city VARCHAR2(50), segment VARCHAR2(20) CHECK(segment IN ('GOLD','SILVER','BRONZE')) ); drop table customers -- 账户表 CREATE TABLE accounts1 ( account_id NUMBER PRIMARY KEY, customer_id NUMBER NOT NULL REFERENCES customers1(customer_id), account_type VARCHAR2(20) CHECK(account_type IN ('SAVINGS','FIXED_DEPOSIT','CURRENT')), balance NUMBER(15,2) DEFAULT 0, open_date DATE DEFAULT SYSDATE, interest_rate NUMBER(5,4) ); drop table accounts -- 交易表 CREATE TABLE transactions1 ( transaction_id NUMBER PRIMARY KEY, account_id NUMBER NOT NULL REFERENCES accounts1(account_id), transaction_type VARCHAR2(10) CHECK(transaction_type IN ('DEPOSIT','WITHDRAWAL')), amount NUMBER(15,2) NOT NULL, transaction_date DATE DEFAULT SYSDATE, channel VARCHAR2(20) CHECK(channel IN ('BRANCH','ATM','ONLINE','MOBILE')) ); -- 分行表 CREATE TABLE branches1 ( branch_id NUMBER PRIMARY KEY, branch_name VARCHAR2(100), city VARCHAR2(50), region VARCHAR2(50) ); 1. PIVOT 应用 - 分行存款类型统计 要求:统计每个分行不同账户类型(SAVINGS, FIXED_DEPOSIT, CURRENT)的账户数量和总余额,结果以矩阵形式展示 2. UNPIVOT 应用 - 客户年龄分段存款分析 要求:将客户按年龄段分组(<30, 30-50, >50),统计每组的存款总额,然后使用UNPIVOT转换为行格式 3. 开窗函数 - 客户存款排名 要求:为每个城市的客户计算存款排名(使用RANK, DENSE_RANK, ROW_NUMBER),并显示排名信息 4. 聚合函数与开窗函数 - 交易分析 要求:分析每个账户的存款行为,计算: 总存款次数 最大单笔存款金额 最近一次存款日期 存款金额与账户平均存款的差异 5. 高级开窗函数 - 存款趋势分析 要求:分析每个账户的存款模式,计算: 每次存款与前一次存款的间隔天数 每次存款与前一次存款的金额差异 存款金额的移动平均值(3次移动平均) 6. PIVOT 与开窗函数结合 - 渠道存款分析 要求:按季度和渠道统计存款总额,并计算每个渠道的季度环比增长率
最新发布
06-05
-- 客户表 CREATE TABLE customers ( customer_id NUMBER PRIMARY KEY, name VARCHAR2(100) NOT NULL, age NUMBER(3), city VARCHAR2(50), segment VARCHAR2(20) CHECK(segment IN ('GOLD','SILVER','BRONZE')) ); -- 账户表 CREATE TABLE accounts ( account_id NUMBER PRIMARY KEY, customer_id NUMBER NOT NULL REFERENCES customers(customer_id), account_type VARCHAR2(20) CHECK(account_type IN ('SAVINGS','FIXED_DEPOSIT','CURRENT')), balance NUMBER(15,2) DEFAULT 0, open_date DATE DEFAULT SYSDATE, interest_rate NUMBER(5,4) ); -- 交易表 CREATE TABLE transactions ( transaction_id NUMBER PRIMARY KEY, account_id NUMBER NOT NULL REFERENCES accounts(account_id), transaction_type VARCHAR2(10) CHECK(transaction_type IN ('DEPOSIT','WITHDRAWAL')), amount NUMBER(15,2) NOT NULL, transaction_date DATE DEFAULT SYSDATE, channel VARCHAR2(20) CHECK(channel IN ('BRANCH','ATM','ONLINE','MOBILE')) ); -- 分行表 CREATE TABLE branches ( branch_id NUMBER PRIMARY KEY, branch_name VARCHAR2(100), city VARCHAR2(50), region VARCHAR2(50) ); 1. PIVOT 应用 - 分行存款类型统计 要求:统计每个分行不同账户类型(SAVINGS, FIXED_DEPOSIT, CURRENT)的账户数量和总余额,结果以矩阵形式展示 2. UNPIVOT 应用 - 客户年龄分段存款分析 要求:将客户按年龄段分组(<30, 30-50, >50),统计每组的存款总额,然后使用UNPIVOT转换为行格式 3. 开窗函数 - 客户存款排名 要求:为每个城市的客户计算存款排名(使用RANK, DENSE_RANK, ROW_NUMBER),并显示排名信息 4. 聚合函数与开窗函数 - 交易分析 要求:分析每个账户的存款行为,计算: 总存款次数 最大单笔存款金额 最近一次存款日期 存款金额与账户平均存款的差异 5. 高级开窗函数 - 存款趋势分析 要求:分析每个账户的存款模式,计算: 每次存款与前一次存款的间隔天数 每次存款与前一次存款的金额差异 存款金额的移动平均值(3次移动平均) 6. PIVOT 与开窗函数结合 - 渠道存款分析 要求:按季度和渠道统计存款总额,并计算每个渠道的季度环比增长率
06-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值