如何基于两个表创建动态SQL

时间:2015-06-22 14:43:06

标签: sql dynamic cartesian-product

我试图根据两个表的笛卡尔积构建一个动态SQL

  

表1 Colunm1开发测试

     

table2 Column2 ProductNumber ProductDesc

这里是我想要的结果:

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

我试着像下面那样做一些简单的查询,但我无法在每个column1值之间添加AND instaed OR

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%'

我可以用一段时间做,但如果你有更好的解决方案,我可以使用它

1 个答案:

答案 0 :(得分:0)

我注意到你希望你的OR按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

(我还没有对它进行过测试,但我之前已经编写了很多这样的代码) 它添加了一个额外的')和(在开头的#39;但如果你在整个事情中使用另一个ROW_NUMBER,你就可以把它拿掉。它也没有关闭')'但是你明白了。除此之外,使用您当前的方法与上述代码的变体。请注意,我假设您没有可用的字符串聚合功能。