sql 服务器中基于不同参数值的多个选择的并集

Union of multiple selects based on different parameters values in sql server

我想在 sql 服务器中具有以下功能:(PSEUDOCODE)

FOR @PARAM IN (value1, value2, ..., valueN)
     UNION(select @PARAM as window_id, variable1,*  from TABLE where variable1<=@PARAM)

我的意思是,@PARAM的每个值表示一个不同的window,为此我想运行上面的select,然后将它们全部合并. ¿有什么方法可以方便地在 sql 服务器中执行此操作?

我建议将此 @param 值存储在 table 中并将其用作 while 循环中的输入

FOR 循环在 sql 服务器中不可用。

create table input_value (id int identity(1,1),val int)

insert into input_value(val)
values(<your param values>)

--创建一个新的空table与你的源table结构相同来存储运行时间结果集

select 1 as int,variable1 as new_v2, * into #table from  TABLE where variable1 <> variable1

declare @i int = 1, @end int = 0, @param int

select @end = max(id) from input_value
while @end>= @i
begin
select @param = val from input_value where id = @i
insert into #table
select @PARAM as window_id, variable1,*  from TABLE where variable1<=@PARAM

set @i  = @i+1
end
select * from #table

Note: every time the input_value table has to be truncated to run this code, truncate will reset the identity to 1 as well as delete the old records

您可以加​​入 VALUES 虚拟 table

SELECT
  v.window_id,
  t.variable1
FROM (VALUES
    (@value1),
    (@value2)  -- etc...
) v(window_id)
JOIN [TABLE] t ON t.variable1 <= v.window_id;

不过,我建议您使用 Table-Valued 参数或 table 变量来执行此连接。如果您在现有 table 中有这些参数,您可以改为加入该参数。