在 SQL 语句之间的加载脚本中连接
Concat in loadscript between SQL statements
大家好,
这让我发疯。我将尝试连接一个 table 中的一些值,以便在另一个语句的 where 子句中使用它。就像这个脚本。
LIB CONNECT TO 'MSSQLSERVER';
TempTab:
Load KST;
SQL SELECT KST FROM vKST WHERE Region = 'Driver';
Let Test = Concat(distinct KST, ',');
drop Table TempTab;
// ...
LIB CONNECT TO 'ORACLESERVER';
Foo:
Load *;
SQL SELECT Value FROM KSTvalues WHERE KST IN ($(Test));
我的问题是变量“Test”仅计算为空。有人对此有想法吗?
在这种情况下,Concat
函数应该在 table 的上下文中使用,以便从字段中获取所有值。
因此,要获取所有值,您必须首先将它们加载到临时 table 中,然后在其中执行连接。然后使用变量获取结果字段值。
看看下面的脚本。连接在 TempTable
中执行,然后使用 peek 函数将 ConcatField
的值放入 vConcatValues
变量(我在最后删除 TempTable
因为它填充变量后不需要)
TempTable
会有以下内容:
而 vConcatValues
将是:
RawData:
Load * inline [
Values
Value1
Value1
Value2
Value3
Value4
Value5
];
TempTable:
Load
Concat(distinct Values, ',') as ConcatField
Resident
RawData
;
let vConcatValues = peek('ConcatField');
// We dont need the TempTable anymore and can be dropped
Drop Table TempTable;
P.S。 sql 子句可能会引发错误,因为值不会被定义为字符串。在这种情况下,您可以使用这样的东西:
TempTable:
Load
Concat(distinct Values, '","') as ConcatField
Resident
Raw
;
使用","
作为分隔符会得到Value1","Value2","Value3","Value4", "Value5
(见前面和最后缺少的"
)
我们必须稍微调整一下变量来解决这个问题:
let vConcatValues = '"' & peek('ConcatField') & '"';
然后结果将是:
"Value1","Value2","Value3","Value4", "Value5"
大家好,
这让我发疯。我将尝试连接一个 table 中的一些值,以便在另一个语句的 where 子句中使用它。就像这个脚本。
LIB CONNECT TO 'MSSQLSERVER';
TempTab:
Load KST;
SQL SELECT KST FROM vKST WHERE Region = 'Driver';
Let Test = Concat(distinct KST, ',');
drop Table TempTab;
// ...
LIB CONNECT TO 'ORACLESERVER';
Foo:
Load *;
SQL SELECT Value FROM KSTvalues WHERE KST IN ($(Test));
我的问题是变量“Test”仅计算为空。有人对此有想法吗?
在这种情况下,Concat
函数应该在 table 的上下文中使用,以便从字段中获取所有值。
因此,要获取所有值,您必须首先将它们加载到临时 table 中,然后在其中执行连接。然后使用变量获取结果字段值。
看看下面的脚本。连接在 TempTable
中执行,然后使用 peek 函数将 ConcatField
的值放入 vConcatValues
变量(我在最后删除 TempTable
因为它填充变量后不需要)
TempTable
会有以下内容:
而 vConcatValues
将是:
RawData:
Load * inline [
Values
Value1
Value1
Value2
Value3
Value4
Value5
];
TempTable:
Load
Concat(distinct Values, ',') as ConcatField
Resident
RawData
;
let vConcatValues = peek('ConcatField');
// We dont need the TempTable anymore and can be dropped
Drop Table TempTable;
P.S。 sql 子句可能会引发错误,因为值不会被定义为字符串。在这种情况下,您可以使用这样的东西:
TempTable:
Load
Concat(distinct Values, '","') as ConcatField
Resident
Raw
;
使用","
作为分隔符会得到Value1","Value2","Value3","Value4", "Value5
(见前面和最后缺少的"
)
我们必须稍微调整一下变量来解决这个问题:
let vConcatValues = '"' & peek('ConcatField') & '"';
然后结果将是:
"Value1","Value2","Value3","Value4", "Value5"