sql 行转列

这篇具有很好参考价值的文章主要介绍了sql 行转列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


oracle sql 实现行转列

实现行转列的两种方式,case when 与piovt 函数的使用例子与比对

一、CASE WHEN 实现行转列

示例:如需要将左边的表格转换成右边的表格
sql 行转列

首先,根据资产属性先将数据分成四列
代码如下:`

SELECT PD_NAME AS 产品名称,
	   CASE WHEN ASSET_TYPE='交易性金融资产' THEN BALANCE END AS 交易性金融资产,
	   CASE WHEN ASSET_TYPE='银行存款' THEN BALANCE END AS 银行存款,
	   CASE WHEN ASSET_TYPE='贷款' THEN BALANCE END  AS 贷款
FROM T_PRODUCT_SUBJECT_AMT;

结果如下:
Isql 行转列
这样看起来比较乱,需要根据产品名称进行汇总,则需要用到聚合函数,如下;

SELECT PD_NAME AS 产品名称,
	   SUM(CASE WHEN ASSET_TYPE='交易性金融资产' THEN BALANCE END) AS 交易性金融资产,
	   SUM(CASE WHEN ASSET_TYPE='银行存款' THEN BALANCE END) AS 银行存款,
	   SUM(CASE WHEN ASSET_TYPE='贷款' THEN BALANCE END) AS 贷款
FROM T_PRODUCT_SUBJECT_AMT
GROUP BY PD_NAME
;

sql 行转列
这样就完整的实现行转列的效果了。

二、PIVOT 实现行转列

代码如下(示例):

SELECT * FROM
	(SELECT PD_NAME,/*没有在pivot里的字段会被作为分组条件*/
			BALANCE,
			ASSET_TYPE 
	  FROM T_PRODUCT_SUBJECT_AMT
	  )
	PIVOT (SUM(BALANCE) AS 余额 /*pivot 函数中必须要有聚合函数出现*/
			FOR ASSET_TYPE IN (
								'交易性金融资产' ,
								'银行存款',
								'贷款'
								) /*分组条件*/
	)

结果如下:
sql 行转列


三、比对

1.如果行转列的行数分类情况较多,使用pivot可以方便书写和改动;case when 写的代码就比较麻烦了些;
2.pivot一次只能实现某一列的值作为条件行转列操作,如果需要多个列的值作为条件同时进行转换时,只能使用 case when ;
3.pivot只能按照同一个规则分类各类数据,各类数据之间不能重复交叉,比如使用pivot不能实现对产品A、B的一个总资产的汇总,case when 可以实现;
4.总的来说, case when 的编写比较麻烦,但是使用场景比较灵活,pivot编写比较简单、简短,但是限制比较多。文章来源地址https://www.toymoban.com/news/detail-483599.html

到了这里,关于sql 行转列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SqlServer行转列方法

    数据库建表 1 使用聚合函数巧妙解决,可以用max、sum等 2 使用pivot函数 3.行转列,多列,参考

    2024年02月15日
    浏览(52)
  • Mysql行转列函数

    group_concat() 例: select oid from Test;  select group_concat( oid ) from Test;

    2024年02月14日
    浏览(30)
  • greenplum行转列

    项目中需要将150w的数据转为1500列的大宽表数据。 最开始尝试了网上提供的两种方法: 实际业务中10行*1500列数据查询并插入需要25秒左右(测试服务器性能比较差) case when的问题是每个case when的语句都会把分组后的数据判断一下,时间复杂度为O²(O为行转列后的列数),非

    2024年02月03日
    浏览(31)
  • PostgreSQL如何行转列

    PostgreSQL如何行转列 方法一: group by + sum + case when 方法二: 用postgresql的crosstab交叉函数 方法三: group by + string_agg + split_part(分组,行转列,字符切割) group by + string_agg

    2024年02月11日
    浏览(40)
  • Hive数据仓库行转列

    查了很多资料发现网上很多文章都是转发和抄袭,有些问题。这里分享一个自己项目中使用的行转列例子,供大家参考。代码如下: 如果是在SparkSQL或Presto平台,或者阿里云的MaxCompute平台,还可使用如下方式:

    2024年02月21日
    浏览(42)
  • Oracle——行转列与列转行

    把某一个字段的值作为唯一值,然后另外一个字段的 行值转换成它的列值 。 转换过程大致如下所示: 通常情况下,采取 group by 唯一字段 进行分组,然后依据不同的列进行判断输出就能转换。 建表语句和增加测试数据sql如下所示: 执行完毕后,数据库中当前的数据结构如

    2024年02月15日
    浏览(40)
  • 5分钟搞懂MySQL - 行转列

    小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里   MySQL 行转列 ,对经常处理数据的同学们来说,一定是不陌生的,甚至是印象深刻,因为它大概率困扰过你,让你为之一愣~ 但当你看到本文后,这个问题就不在是问题,及时收藏,以后谁再问你这个问

    2023年04月08日
    浏览(44)
  • Oracle行转列函数,列转行函数

    Oracle 可以通过 PIVOT , UNPIVOT ,分解一行里面的值为多个列,及来合并多个列为一行。 PIVOT 是用于将行数据转换为列数据的查询操作(类似 数据透视表 )。通过使用PIVOT,您可以按照特定的列值将数据进行汇总,并将其转换为新的列。 语法 pivot( 聚合函数 for 需要转为列的字段名

    2024年01月20日
    浏览(37)
  • Python操作Excel实战:Excel行转列

    # 1、原始数据准备 样例数据准备 地区 1m ³ 2-5m³ 6-10m³ 11-20m³ 21-40m³ 地区 单价 计费单位 费用最小值 费用最大值 北京 130 120 110 100 90 天津 130 120 110 100 90 石家庄 130 120 110 100 90 保定 140 130 120 110 100 张家口 170 150 130 120 110 邢台 140 120 110 100 90 邯郸 140 130 120 110 100 衡水 140 130 120 1

    2024年02月09日
    浏览(34)
  • 【SQL开发实战技巧】系列(三十七):数仓报表场景☞从表内始终只有近两年的数据,要求用两列分别显示其中一年的数据聊行转列隐含信息的重要性

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2023年04月18日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包