首页 > 解决方案 > 在 SQL 语句之间的 loadscript 中连接

问题描述

嘿,伙计们,

它让我发疯。我将尝试连接一个表中的一些值,以便在另一个语句的 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));

我的问题是变量“测试”只计算为空。有没有人对此有一个可行的想法?

标签: qliksense

解决方案


在这种情况下Concat,函数应该在表的上下文中使用,以便从字段中获取所有值。

因此,要获取所有值,您必须首先将它们加载到临时表中并在其中执行连接。然后使用变量获取结果字段值。

看看下面的脚本。执行连接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;

PS 可能 sql 子句会引发错误,因为这些值不会被定义为字符串。在这种情况下,您可以使用以下内容:

TempTable:
Load
  Concat(distinct Values, '","') as ConcatField
Resident
  Raw
;

使用","作为分隔符将导致(见前面和最后Value1","Value2","Value3","Value4", "Value5的缺失)"

我们将不得不稍微调整变量来解决这个问题:

let vConcatValues = '"' & peek('ConcatField') & '"';

结果将是:

"Value1","Value2","Value3","Value4", "Value5"


推荐阅读