Delphi 整合数组(Group by某列)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 整合数组(Group by某列)相关的知识,希望对你有一定的参考价值。

有个Tstrings(或某表),三列,N行:
第一行: A,123,PPP
第二行: B,123,PPP
第三行: C,123,PPP
第四行: D,321,QQQ
第五行: E,321,QQQ
第六行: F,123,TTT
第七行: G,321, YYY
......
-----------------
想要的效果(GROUP BY 第二第三列):
第一行: A,B,C | 123 | PPP
第二行: D,E | 321 | QQQ
第三行: F | 123 | TTT
第四行: G | 321 | YYY
......

求算法,感谢各位大虾

参考技术A 我的思路是克隆一个表出来
然后循环【源表】 对比【克隆表】,如果相同那么添加到【目标表】,并删除【克隆表】中对应行。
参考技术B 一个笨办法,弄到数据库中,由sql操作好后再读到内存本回答被提问者采纳 参考技术C 4423424254353465467y567866

oracle在group by时某列有多个值的拼接

 

最近编码过程中出现了group by后,某些列会有多个值,而我需要把这些多个值的列进行拼接的情况,和大家分享一下。

有如下表student:

技术图片

我们希望以class分组,每组的信息平铺,效果如下

技术图片

分组首先想到的肯定是group by:

select * from student s group by s.class;

我们会发现这样会报错,因为name和age有多个值,这个时候我们就可以使用wm_concat()方法来解决。

select wm_concat(s.name),wm_concat(s.age),s.class from student s gruop by s.class;

但是这个写法又出现了一个新的问题,你会发现name和age这列的结果是

技术图片

只需要把wm_concat前面加一个to_char就好了,而且结果就是上面想要的结果。

select to_char(wm_concat(s.name)) as name,
to_char(wm_concat(s.age)) as age,
s.class
from student s
gruop by s.class;
---------------------
还有一个函数LISTAGG(‘参数一’,’参数二’),这个函数和wm_comcat的作用类似,第一个参数是字段,第二个参数是多个值之间的分隔符,但是用法有些不同,例子如下:

select listagg(s.name,‘-‘)within group(order by class) as name,
to_char(wm_concat(s.age)),
s.class
from student s
gruop by s.class;
---------------------
技术图片

来源:https://blog.csdn.net/yufeng1397/article/details/78672607

 

以上是关于Delphi 整合数组(Group by某列)的主要内容,如果未能解决你的问题,请参考以下文章

oracle在group by时某列有多个值的拼接

JS 数组 group by 分组

Ruby 哈希数组。 group_by 并在一行中修改

如何使用GROUP BY时返回数组

结合 GROUP BY 对数组求和

group by JSON包含数组的列