Объединение в loadscript между операторами SQL

#qliksense

#qliksense

Вопрос:

Привет, ребята,

это сводит меня с ума. Я попытаюсь объединить некоторые значения из одной таблицы, чтобы использовать их в предложении 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» вычисляется только до null. У кого-нибудь есть рабочая идея для этого?

Ответ №1:

В этом случае Concat функция должна использоваться в контексте таблицы, чтобы получить все значения из поля.

Итак, чтобы получить все значения, вам нужно сначала загрузить их во временную таблицу и в ней выполнить конкатенацию. А затем используйте переменную, чтобы получить результирующее значение поля.

Взгляните на приведенный ниже сценарий. Конкатенация выполняется в TempTable , а затем с помощью функции peek для получения значения ConcatField vConcatValues переменной into (я удаляю значение 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 = '"' amp; peek('ConcatField') amp; '"';

И результат тогда будет:

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