如何操作SQL

时间:2016-07-07 13:42:52

标签: sql kognitio-wx2 wx2

说我有以下数据集

WITH dataset (hno,sorder,level,dummy,maxorder) AS 
(
SELECT 1,   1,  'val1', 'NULL1',  5 FROM dual UNION ALL
SELECT 1,   2,  'val2', 'NULL2',  5 FROM dual UNION ALL
SELECT 1,   3,  'val3', 'NULL3',  5 FROM dual UNION ALL
SELECT 1,   4,  'val4', 'NULL4',  5 FROM dual UNION ALL
SELECT 1,   5,  'val5', 'NULL5',  5 FROM dual)
SELECT *
FROM dataset;

HNO SORDER  LEVEL   DUMMY   MAXORDER
1       4   val4    NULL4   5
1       2   val2    NULL2   5
1       3   val3    NULL3   5
1       1   val1    NULL1   5
1       5   val5    NULL5   5

我需要另一个名为TEXT

的专栏
HNO SORDER  LEVEL   DUMMY   MAXORDER    TEXT
1       4   val4    NULL4   5           val1,val2,val3,val4,NULL5
1       2   val2    NULL2   5           val1,val2,NULL3,NULL4,NULL5
1       3   val3    NULL3   5           val1,val2,val3,NULL4,NULL5
1       1   val1    NULL1   5           val1,NULL2,NULL3,NULL4,NULL5
1       5   val5    NULL5   5           val1,val2,val3,val4,val5

这个想法是为SQL操纵动态占位符。因此,如果排序顺序是介于1 ... n之间的范围,那么对于SORDER值x,我需要将列LEVEL中的值从1返回到x,然后从虚拟中返回x + 1到n和所有这些连接为逗号分隔值,最重要的是在一个SQL中。此最大订单可以是任何数字,并且不是固定的。 WX2缺乏递归CTE,这使得它变得困难。

任何指针?

1 个答案:

答案 0 :(得分:0)

此函数根据您描述的逻辑连接字符串(test是包含数据的表的名称):

CREATE FUNCTION Concatenate_string
(
    @sorder int
)
RETURNS varchar(1000)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result varchar(1000)=''
    declare @i int=1
    while @i<=(select max(sorder) from test)
    begin
        set @result=@result + (select case when @i <= @sorder then level else dummy end+',' from test where sorder=@i)
        set @i=@i+1
    end

    return @result


END
GO