【问题标题】:SQL Server: Generate WHERE clause from resultset ids?SQL Server:从结果集 id 生成 WHERE 子句?
【发布时间】:2022-01-03 10:49:36
【问题描述】:

我有一个生成以下结果集的查询:

ID (text)    VAL
 1           A
 2           B
 3           C

我想从结果集 ID 生成 WHERE 子句:

where id in ('1','2','3')

使用 Oracle,我可以使用以下查询来生成 WHERE 子句:

with a as (

  <my_query>

)
select 'where id in ('
  || listagg(id, ',') within group(order by id)
  || ')' as where_clause
from a

有没有办法使用 SQL Server 做同样的事情?


相关:Oracle: Generate WHERE clause from resultset ids?

【问题讨论】:

标签: sql-server sql-server-2016 listagg


【解决方案1】:

你可以使用普通的IN

with a as (

  <my_query>

),
b as (

  <Other Query>

)
select *
from b
where b.id in (
  select a.id
  from a
);

【讨论】:

    【解决方案2】:

    试试这个。

    with a as (
    
      <my_query>
    
    )
    SELECT 'WHERE id IN (' +
      STRING_AGG(id, ',') WITHIN GROUP(ORDER BY id) 
      + ')' as where_clause
    FROM a
    

    然后你会得到WHERE id IN (1,2,3)

    如果你想得到WHERE id IN ('1','2','3') 然后你可以像下面这样改变

    SELECT 'WHERE id IN (''' +
          STRING_AGG(id, ''',''') WITHIN GROUP(ORDER BY id) 
          + ''')' as where_clause
    FROM a
    

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2011-02-16
      相关资源
      最近更新 更多