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 中有这些参数,您可以改为加入该参数。
我想在 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 中有这些参数,您可以改为加入该参数。