【IT专家】求用SQL实现一个排列组合的算法题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
求用SQL实现一个排列组合的算法题
2018/04/29 10 想得到图二的结果简单来说,图一是要去做排列组合的基础的数据,基础数据只有1,2,3三个不同的值,图二是图一通过排列组合后的最简结果,把里面能合并的数据合并,不能合并的数据继续用原始的数据写出来即可。。请问这个要如何实现。如: 1 1 2 1 1 1 2 3 可以合并为 1 1 2 1,3 如 1 2 2 1 1 2 2 3 3 2 2 3 3 2 2 1 可以合并为1,3 2 2 1,3 但是像原始数据1 3 2 3 就没法和别的数据做排列组合的合并,那么在result表中就继续保留为 1 3 2 3 当然,我这只是部分数据,实际数据很多,可能最终result的结果在算法不同的情况下得到的排列组合方式也不一样,我希望能得到selectcount(*)fromt_sort_and_comb_result的结果最小的算法为最优解。请问这个如何实现。可以用SQL,循环,游标,存储过程等等方法,只要能得到最优的结果。selecta,b,c,litangg(d,’,’)withingroup (orderbyd)fromt groupbya,b,c --注意:拼接后的长度,不能超过4000。selecta,b,c,litangg(d,’,’)withingroup(orderbyd)fromt groupbya,b,c --注意:拼接后的长度,不能超过4000。您说的这种方式只考虑了一个字段,而我的需求不只是D列这一个字段需要组合,而是A,B,C列均有存在组合的可能,如t_sort_and_comb_result表中的第三条记录,第三条记录就是由4条记录合并而来的。。当然实际的数据,是有十几个列,几千行数据的合并,每一个列都可能存在一个or多个组合,把能合并的数据合并,不能合并的数据保持原样。得到的结果条数最少为最优解。您说的这种方式和我写groupby然后用wm_concat方式合并感觉差不多哦~我在网上找了下,感觉listagg并不能直接解决我的问题。另外litangg-- listagg 是的,可能需要多层嵌套,按照一楼的解法,每次组合一个字段,把这个结果继续拿去做嵌套查询,有多少列就嵌套多少次,那样可能能得到一个合并后的结果,但并不一定是最优结果。拆分成同样还是出现组合的数据可能出现在任何字段。可能有一个字段是组合的,也可能是多个字段组合的。请问有什么号办法呢?引用1楼wmxcn2000的回复: 楼主研究下listagg这个函数,真好适合你现在的需求。大概如下selecta,b,c,litangg(d,’,’)