oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下:需要将每个产品进行汇总,通过ichartjs进行展示,图表中需要数据的顺序是:Java代码vardata=[{name:’产品1′,value:[145,192,198,180],color:’#dad81f’},{name:’产品2′,value:[135,210,180,210],color:’#1f7e92’…

大家好,又见面了,我是你们的朋友全栈君。

业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下:

oracle sql列转行_oracle 列转行

需要将每个产品进行汇总,通过ichartjs进行展示,图表中需要数据的顺序是:

Java代码 oracle sql列转行_oracle 列转行oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行

var data = [

{ name :’产品1′, value:[145,192,198,180], color:’#dad81f’},

{ name :’产品2′, value:[135,210,180,210], color:’#1f7e92′},

{ name :’产品3′, value:[198,210,198,198], color:’#76a871′},

];

var labels = [“2013-10-10 13:21”,

“2013-10-10 13:22”,

“2013-10-10 13:23”,

“2013-10-10 13:24”];

var data = [

{ name : ‘产品1′, value:[145,192,198,180], color:’#dad81f’ },

{ name : ‘产品2′, value:[135,210,180,210], color:’#1f7e92’ },

{ name : ‘产品3′, value:[198,210,198,198], color:’#76a871’ },

];

var labels = [“2013-10-10 13:21”,

“2013-10-10 13:22”,

“2013-10-10 13:23”,

“2013-10-10 13:24”];

如果直接用oracle 列转行函数 WMSYS.WM_CONCAT 函数处理,结果会没有排序效果:

Sql代码 oracle sql列转行_oracle 列转行oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行

SELECTNAME,WMSYS.WM_CONCAT(counter) counterFROMa_test tGROUPBYNAME

SELECT NAME,WMSYS.WM_CONCAT(counter) counter FROM a_test t GROUP BY NAME

结果最后一位与第二位错位:

oracle sql列转行_oracle 列转行

突然想,进行排序后拼接呢?

Sql代码 oracle sql列转行_oracle 列转行oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行

SELECTNAME,WMSYS.WM_CONCAT(counter) counterFROMa_test tORDERBYNAMEGROUPBYNAME

SELECT NAME,WMSYS.WM_CONCAT(counter) counter FROM a_test t ORDER BY NAME GROUP BY NAME

不行!语句根本就不通!在内部进行排序再拼接呢?

Sql代码 oracle sql列转行_oracle 列转行oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行

SELECTt.NAME, WMSYS.WM_CONCAT(counter) counterFROM(SELECTNAME,counterFROMa_testWHEREUTC < 13ORDERBYUTCASC) TGROUPBYNAME

SELECT t.NAME, WMSYS.WM_CONCAT(counter) counter FROM (SELECT NAME,counter FROM a_test WHERE UTC < 13 ORDER BY UTC ASC) T GROUP BY NAME

结果是:

oracle sql列转行_oracle 列转行

跟上面一样,都不行。最后不用分组来处理,发现结果能实现排序,不过就是记录多了点:

Sql代码 oracle sql列转行_oracle 列转行oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行

SELECTNAME,

WMSYS.WM_CONCAT(counter) OVER(PARTITIONBYNAMEORDERBYNAME,UTC)KEY,

row_number() over(PARTITIONBYNAMEORDERBYNAMEdesc) rs

froma_test

SELECT NAME,

WMSYS.WM_CONCAT(counter) OVER(PARTITION BY NAME ORDER BY NAME,UTC) KEY,

row_number() over(PARTITION BY NAME ORDER BY NAME desc) rs

from a_test

oracle sql列转行_oracle 列转行

怎么办? ……….哦………..外围加个查询语句,来个分组取最大值,怎么样?

通过oracle 列转行函数 WMSYS.WM_CONCAT创建语句如下:

Sql代码 oracle sql列转行_oracle 列转行oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行

SELECTA.NAME,MAX(KEY)AScounterFROM(SELECTNAME,

WMSYS.WM_CONCAT(counter) OVER(PARTITIONBYNAMEORDERBYNAME,UTC)KEY,

row_number() over(PARTITIONBYNAMEORDERBYNAMEdesc) rs

froma_test ) A

GROUPBYNAME

SELECT A.NAME,MAX(KEY) AS counter FROM (SELECT NAME,

WMSYS.WM_CONCAT(counter) OVER(PARTITION BY NAME ORDER BY NAME,UTC) KEY,

row_number() over(PARTITION BY NAME ORDER BY NAME desc) rs

from a_test ) A

GROUP BY NAME

得到结果

oracle sql列转行_oracle 列转行

到此,通过oracle 列转行函数 WMSYS.WM_CONCAT进行排序结束,结果令人满意。

总结:

1. 记录下来,给以后的自己和需要的人来点灵感,遇到问题后要一步步的分析逻辑,哪怕第一个主意不能解决问题,关键要开动脑筋想。

2. oracle的函数不一定能解决问题,有时候很多技巧加很多函数才是解决方案。

3. 注意,如果在产品根据分组的条件(本列子中是将数据分四组,是按照时间分组的)不能确定,或者会不规则,就不能使用这个方案来处理,比如分组的时间中间有一个断档了,结果就不正确:

oracle sql列转行_oracle 列转行

看看,结果永远是下面这个:

oracle sql列转行_oracle 列转行

其实我们要的是这样的(注意最后一排逗号中间的空格):

Sql代码 oracle sql列转行_oracle 列转行oracle sql列转行_oracle 列转行

oracle sql列转行_oracle 列转行

NAMECOUNTER

1 产品1 145,192,198,180,167,166

2 产品2 135,210,180,210,188,164

3 产品3 198,210,198,198,,165

NAMECOUNTER

1产品1145,192,198,180,167,166

2产品2135,210,180,210,188,164

3产品3198,210,198,198,,165

遇到这种情况,就可能需要程序来处理。我目前还没有找到oracle的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148270.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 史上最强超融合入门干货:超融合与传统架构特性及收益详细对比

    史上最强超融合入门干货:超融合与传统架构特性及收益详细对比在 IT 基础架构领域工作有十年了 亲眼目睹和参与了上一代网络存储架构在中国的兴起和衰败 的确 新 IT 浪潮已经到来 超融合就是诸多风口之一 成为了近几年 IT 业界备受关注的话题 虽然超融合这个概念已经被厂商热炒了至少两年 但看到市场上依旧存在着很多模糊的定义和理解 所以想整理一些学习笔记和个人见解 希望这些干货内容能对想入门的朋友有所帮助 一 超融合的核心特征是什么 首先大家需要有

    2025年11月7日
    1
  • linux mysql mysql.sock(mysqldump命令详解)

    什么是socat?socat是一个实用的命令行工具。常用方法端口转发#端口转发#socat-d-d-lf/var/log/socat.logTCP4-LISTEN:6666,bind=127.0.0.1,reuseaddr,forkTCP:127.0.0.1:3306#mysql-uroot-h127.0.0.1-P6666-p文件写入#不使用group则默认当前用户soc…

    2022年4月10日
    137
  • 用python下载b站视频_tagB站

    用python下载b站视频_tagB站作者|Rocky0429来源|Python空间大家好,我是Rocky0429。B站,作为Z世代的新式社交性学习平台,对我来说一直只是一个学习的好去处,学习这事儿肯定是我留在B站的唯一原因…如果你非要问我为什么之前一直在循环播放“听狄胖的话”,那我也只能告诉你是我不小心点了鬼畜区,想知道小元芳是不是真的有许多问号…我承认是我真的太年轻了,对知识总是太饥渴…好了,这一篇儿可以翻过了,下面说点正经的…我Python学习的很多视频都是在B站上看的,刚.

    2022年9月22日
    2
  • CSS div隐藏滚动条「建议收藏」

    CSS div隐藏滚动条「建议收藏」隐藏指定div或者滚动标签里面的滚动条。<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”width=device-width,initial-scale=1.0″><title>Document</title><style>/*.

    2025年7月10日
    4
  • 使用PHP password_hash()加密,再也不怕被拖库了

    使用PHP password_hash()加密,再也不怕被拖库了

    2022年2月12日
    40
  • app抓包分析sign

    app抓包分析sign介绍:简单的app抓包分析sign一:准备工具jeborjadxorgdaandsoon首先抓包:点击登录抓取包:可以看见,这里直接抓到账户密码。我们可以通过DDMS查看日志信息:通过添加筛选,可以直接看到信息。我们在看看代码逻辑:对比一下,可以看到,是一样的,说明就是将一串密钥+我们的data数据,然后进行MD5加密得到的sign。后面的代码:应该是在做编码,这里得到正确的结果,就不用看他了。如果结果不正确,可以分析下这个代码的是在干什么,你也可以自己分

    2022年5月9日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号