网站验收标准,中山 网站建设一条龙全包,用万网做网站,网站栏目关键词一、前言
二、简述
1、行转列概念
2、列转行概念
三、GaussDB数据库的行列转行实验示例
1、行转列示例
1#xff09;创建实验表#xff08;行存表#xff09;
2#xff09;静态行转列
3#xff09;行转列#xff08;结果值#xff1a;拼接式#xff09;
4创建实验表行存表
2静态行转列
3行转列结果值拼接式
4动态行转列拼接SQL式
2、列转行示例
1创建实验表复用前面的测试数据
2使用union all将各科目数学、英语、语文整合为一列
四、小结 一、前言
在构建数据仓库或做数据分析时需要对原始数据的结构进行一定的处理有时涉及到“行转列”有时涉及到“列转行”那么这两个转换的方式具体是什么有什么差异怎么实现今天我们将以GaussDB数据库为例给大家做一下讲解。
二、简述
1、行转列概念
即将多行一列数据转为一行多列显示。通常转化后将某一列分类后的值作为新的列名将此值对应的多行数据显示成一行。 2、列转行概念
即将一行多列数据转成多行一列显示。通常将转化后的列名为某一行中某一列的值来识别原先对应的数据。 三、GaussDB数据库的行列转行实验示例
用一张学生成绩来举例从老师的角度在录入成绩时每科老师都会单独录入每个学生的本科成绩。而从学生的角度学生只关心自己各科的成绩分别是多少。所以如果把老师录入数据作为原始表那么学生查看自己的成绩时就要用到行转列如果让学生上报自己各科的成绩然后老师去查对应学科的学生考试成绩时那就是列转行了。
1、行转列示例
1创建实验表行存表
--创建实验表行存表
CREATE TABLE grade(
name VARCHAR(10)
,course VARCHAR(10)
,score INT);--初始化测试数据
INSERT INTO grade VALUES (张三,数学,80);
INSERT INTO grade VALUES (张三,英语,88);
INSERT INTO grade VALUES (张三,语文,95);
INSERT INTO grade VALUES (李四,数学,88);
INSERT INTO grade VALUES (李四,英语,70);
INSERT INTO grade VALUES (李四,语文,93);--查看结果
SELECT * FROM grade ORDER BY course; 2静态行转列
使用sum、case when的方式
--静态行转列
SELECT name ,sum(case when course 数学 then score else 0 end) AS 数学,sum(case when course 英语 then score else 0 end) AS 英语,sum(case when course 语文 then score else 0 end) AS 语文
FROM grade
GROUP BY name; 3行转列结果值拼接式
使用listagg within group
--行转列结果值拼接式
SELECT name, LISTAGG(score,,) WITHIN GROUP (ORDER BY course) FROM grade GROUP BY name; 4动态行转列拼接SQL式
通过“listagg 创建FUNCTION VIEW”的方式实现
--动态行转列SQL拼接式
SELECT listagg(concat(SUM(CASE WHEN course , course, THEN score ELSE 0 END) AS , course,),,) WITHIN GROUP(ORDER BY 1) AS concat_text FROM (SELECT DISTINCT course FROM grade);--concat_text的结果
SUM(CASE WHEN course 数学 THEN score ELSE 0 END) AS 数学,SUM(CASE WHEN course 英语 THEN score ELSE 0 END) AS 英语,SUM(CASE WHEN course 语文 THEN score ELSE 0 END) AS 语文--创建一个函数。
CREATE OR REPLACE FUNCTION fun_test()
RETURNS VOID
LANGUAGE SQL
AS $$ DECLARE
s_sql text;
rec record;
BEGIN s_sql : SELECT listagg(CONCAT(SUM(CASE WHEN course , course, THEN score ELSE 0 END) AS , course, ),, ) WITHIN GROUP(ORDER BY 1) AS concat_text FROM (SELECT DISTINCT course FROM grade);; EXECUTE s_sql INTO rec; s_sql : DROP VIEW IF EXISTS v_score; CREATE VIEW v_score AS SELECT name, || rec.concat_text || FROM grade GROUP BY name;;EXECUTE s_sql;
END $$;--调用
CALL fun_test();--查看执行结果
select * from v_score; Tip请注意SQL拼写时的英文单引号、双引号。
2、列转行示例
1创建实验表复用前面的测试数据
--创建实验表复用前面的测试数据
CREATE TABLE grade1 AS
SELECT name ,sum(case when course 数学 then score else 0 end) AS 数学,sum(case when course 英语 then score else 0 end) AS 英语,sum(case when course 语文 then score else 0 end) AS 语文
FROM grade
GROUP BY name;--查看结果
SELECT * FROM grade1; 2使用union all将各科目数学、英语、语文整合为一列
--使用union all将各科目数学、英语、语文整合为一列
SELECT * FROM
(
SELECT name, 数学 AS course, 数学 AS score FROM grade1
union all
SELECT name, 英语 AS course, 英语 AS score FROM grade1
union all
SELECT name, 语文 AS course, 语文 AS score FROM grade1
)
order by name; 四、小结
行列互转在一些数据库使用场景中经常用到比如数据分析、数仓建设等。但不同的数据库软件有着不同处理方式但是行列换的基本思路是一致的。本文主要是以GaussDB数据为平台为大家做了简单的讲述 欢迎测试。 ——结束 文章转载自: http://www.morning.mmclj.cn.gov.cn.mmclj.cn http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn http://www.morning.tqsnd.cn.gov.cn.tqsnd.cn http://www.morning.hpnhl.cn.gov.cn.hpnhl.cn http://www.morning.gkfwp.cn.gov.cn.gkfwp.cn http://www.morning.drywd.cn.gov.cn.drywd.cn http://www.morning.qkgwx.cn.gov.cn.qkgwx.cn http://www.morning.qiyelm.com.gov.cn.qiyelm.com http://www.morning.qnyf.cn.gov.cn.qnyf.cn http://www.morning.tzrmp.cn.gov.cn.tzrmp.cn http://www.morning.zzgtdz.cn.gov.cn.zzgtdz.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.jpkk.cn.gov.cn.jpkk.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.tzrmp.cn.gov.cn.tzrmp.cn http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.njddz.cn.gov.cn.njddz.cn http://www.morning.smtrp.cn.gov.cn.smtrp.cn http://www.morning.wklhn.cn.gov.cn.wklhn.cn http://www.morning.mgtmm.cn.gov.cn.mgtmm.cn http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.bmlcy.cn.gov.cn.bmlcy.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.qznkn.cn.gov.cn.qznkn.cn http://www.morning.yhglt.cn.gov.cn.yhglt.cn http://www.morning.xdjsx.cn.gov.cn.xdjsx.cn http://www.morning.wpxfk.cn.gov.cn.wpxfk.cn http://www.morning.gzzxlp.com.gov.cn.gzzxlp.com http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.sbdqy.cn.gov.cn.sbdqy.cn http://www.morning.whnps.cn.gov.cn.whnps.cn http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn http://www.morning.zzaxr.cn.gov.cn.zzaxr.cn http://www.morning.lqynj.cn.gov.cn.lqynj.cn http://www.morning.cryb.cn.gov.cn.cryb.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.qkcyk.cn.gov.cn.qkcyk.cn http://www.morning.prgrh.cn.gov.cn.prgrh.cn http://www.morning.mwzt.cn.gov.cn.mwzt.cn http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.tsdqr.cn.gov.cn.tsdqr.cn http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn http://www.morning.qxrct.cn.gov.cn.qxrct.cn http://www.morning.ymwcs.cn.gov.cn.ymwcs.cn http://www.morning.cmrfl.cn.gov.cn.cmrfl.cn http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn http://www.morning.cwnqd.cn.gov.cn.cwnqd.cn http://www.morning.fqtdz.cn.gov.cn.fqtdz.cn http://www.morning.srckl.cn.gov.cn.srckl.cn http://www.morning.rbktw.cn.gov.cn.rbktw.cn http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn http://www.morning.fbmjw.cn.gov.cn.fbmjw.cn http://www.morning.plxhq.cn.gov.cn.plxhq.cn http://www.morning.bfmq.cn.gov.cn.bfmq.cn http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn http://www.morning.grfhd.cn.gov.cn.grfhd.cn http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn http://www.morning.rqlbp.cn.gov.cn.rqlbp.cn http://www.morning.trzmb.cn.gov.cn.trzmb.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.ykklw.cn.gov.cn.ykklw.cn http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.lptjt.cn.gov.cn.lptjt.cn http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn http://www.morning.yjtnc.cn.gov.cn.yjtnc.cn http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn http://www.morning.hsksm.cn.gov.cn.hsksm.cn http://www.morning.wspyb.cn.gov.cn.wspyb.cn http://www.morning.srmpc.cn.gov.cn.srmpc.cn http://www.morning.ntgrn.cn.gov.cn.ntgrn.cn http://www.morning.qrksj.cn.gov.cn.qrksj.cn http://www.morning.fesiy.com.gov.cn.fesiy.com http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn http://www.morning.nknt.cn.gov.cn.nknt.cn http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn