【问题标题】:How to create Dynamic SQL based on two tables如何基于两个表创建动态 SQL
【发布时间】:2015-09-08 01:51:51
【问题描述】:

我正在尝试基于两个表的笛卡尔积构建动态 SQL

Table1 列 1 开发测试

table2 Column2 ProductNumber ProductDesc

这里是我想要的结果:

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

我尝试做一些简单的查询,如下所示,但我无法在每个 column1 值之间添加一个 AND 设置一个 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%'

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

【问题讨论】:

    标签: sql dynamic cartesian-product


    【解决方案1】:

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

    (我没有测试过,但是我之前写过很多这样的代码) 它在开头添加了一个额外的 ') AND (',但是如果你在整个事情上使用另一个 ROW_NUMBER,你可以把它去掉。它也缺少一个结束 ')',但你明白了。除此之外,将您当前的方法与上述代码的变体一起使用。请注意,我假设您没有可用的字符串聚合函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多