2015-06-22 3 views
0

Я пытаюсь построить динамический SQL, основанный на декартово произведение двух таблицКак создать динамический SQL на основе двух таблиц

Table1 Colunm1 Dev Test

table2 Столбец2 ProductNumber ProductDesc

здесь результат, что я хочу:

(ProductNumber LIKE '%dev%' OR ProductDesc LIKE '%dev%') 
    AND (ProductNumber LIKE '%Test%' OR ProductDesc LIKE '%Test%') 

Я пытался сделать некоторый простой запрос, как показано ниже, но я не могу управлять, чтобы добавить и instaed в OR между каждым значением COLUMN1

SELECT @sql = COALESCE(@sql + Colunm2 + ' LIKE ''%' + Colunm1 + '%'' OR ','') 
    from Table1, Table2 

, которые дают:

ProductNumber LIKE '%dev%' OR 
ProductDesc LIKE '%dev%' OR 
ProductNumber LIKE '%Test%' OR 
ProductDesc LIKE '%Test%' 

я могу сделать это с некоторым временем, но если у вас есть лучшее решение, которое я могу использовать его

ответ

0

хочу отметить, что вы хотите, чтобы ваши ОШ сгруппированы по table1.column1, поэтому ниже должно работать:

SELECT CASE WHEN row_num = 1 THEN ') AND (' ELSE '' END || code as code 
FROM (
SELECT Column1, ROW_NUMBER() OVER (GROUP BY Column 1) as row_num, COALESCE(Column2 + ' LIKE ''%' + Column1 + '%'' OR ','') as code 
FROM Table1, Table2 
) gen_code 
ORDER BY Column1, row_num 

(Я не тестировал его, но я написал много такого кода раньше) Он добавляет дополнительный ') И (' в начале, но вы можете получить его, если вы используете другой ROW_NUMBER по всему предмету. У этого также не хватает закрытия ')', но вы получаете идею. Кроме этого, используйте свой текущий подход с вариантом кода выше. Обратите внимание, что я предположил, что у вас нет функции агрегации строк.

 Смежные вопросы

  • Нет связанных вопросов^_^