实际上这些字段不是'1',它们是很长的字符串。我的目标是让c ++程序将这些数据解析为分层对象。所以我希望查询尽可能快地运行,同时返回最小数量的数据,以便我能够用来填充对象。
以下是在我的想象中,如何实现这一目标,但如果有一种更简单的方法来实现真正的目标,那我就是全部的耳朵。
我想到的其他事情: 我考虑了一个数据透视表,但是如果层次结构的每个层都有5个分支,那么当我们到达数据时,我们的数据透视表中会有3000多列。
我希望将2个字段连在一起,然后将它们列入其中 按分层标题字段分组,如果不是,则仅打印字段 与先前打印的行相同。
input
tier1,tier2,tier3,tier4,tier5,data1,data2
1 1 1 1 1 big tall
1 1 1 1 1 big smelly
1 1 1 1 2 gross tall
1 1 1 2 1 flatulent exceptional
desired output:
1 1 1 1 1 big,tall big,smelly
2 gross,tall
2 1 flatulent,exceptional
虚构函数,只打印一个字段,如果它自上次打印的行以来已经改变,我们会称之为疯狂()
select
crazy(tier1),
crazy(tier2),
crazy(tier3),
crazy(tier4),
crazy(tier5),
listagg(data1||data2, ' ') within group(?)
from table
group by tier1,tier2,tier3,tier4,tier5
答案 0 :(得分:0)
如果您知道列,那么您可能会使用CTE(取决于您使用的SQL版本)。如果这不起作用,那么我建议你在代码中完成你的工作。 SQL适用于基于SET的逻辑,而不适用于过程和函数(即使它们受支持)。与在代码中运行分析
相比,在每一行上运行5或6个函数的性能将会非常糟糕