我想在1列或变量中合并多个查询的结果。 我有这个查询: -
select Id from EmployeeDetail where Code = 'ABC1'
select Id from EmployeeDetail where Code = 'ABC2'
... So On till ABC200
我希望1变量中的所有ID都能进一步使用它。
我正在尝试使用foreach来实现这个目标。如何在1变量中获取它以在进一步的不同查询中使用它。
我已经尝试过以下示例来获取1个连接变量中的字符串: - 下面的代码只是一个试验,它不是在实际查询中。
declare @num int
declare @num1 VARCHAR(MAX)
set @num = 1
declare @results table ( val int )
while (@num < 84)
begin
insert into @results ( val ) values ( @num )
set @num = @num + 1
set @num1 += '5000'
select @num1
end
答案 0 :(得分:1)
如果您提取的EmployeeDetail代码全部匹配某些模式,那么您可以使用下面的简单查询实现您想要的目标:
view.post()
运行后,变量@AllIDs将包含用&#39;,&#39;分隔的所有ID。
答案 1 :(得分:0)
据我所知,您希望将所有ID的结果与代码连接为ABC1,ABC2,... ABC200。检查我的下面的解决方案,希望它可以帮助你。
declare @num int
declare @text VARCHAR(MAX)
set @text = 'ABC'
set @num = 1
declare @results table ( val varchar(10) )
while (@num <= 200)
begin
insert into @results ( val ) values (@text + cast(@num as varchar(3)) )
set @num = @num + 1
end
Select ID from EmployeeDetail where Code in (Select val from @results)
答案 2 :(得分:0)
问题可分为两部分
过滤步骤1中生成的数据的结果。
--Step 1
declare @num int
declare @text VARCHAR(MAX)
set @text = 'ABC'
set @num = 1
declare @results table ( val varchar(10) )
while (@num <= 200)
begin
insert into @results ( val ) values (@text + cast(@num as varchar(3)) )
set @num = @num + 1
end
--Step 2
Select ID from EmployeeDetails e
inner join @results r on r.val=e.Code
答案 3 :(得分:0)
-- Prepare the data
DECLARE @EmployeeDetail TABLE (Id int identity(1,1), Code varchar(10))
INSERT @EmployeeDetail VALUES ('ABC1'), ('ABC2'), ('DEF'), ('ABC3')
DECLARE
@CodePattern varchar(10) = 'ABC',
@RangeFrom int = 1,
@RangeTo int = 200
DECLARE @Ids varchar(max) = (SELECT STUFF((
SELECT ',' + CAST(Id AS varchar(10))
FROM @EmployeeDetail
WHERE
-- The pattern of the code is prefix + number
-- Can use LIKE and BETWEEN to replace your multiple query
code LIKE @CodePattern + '%'
AND SUBSTRING(code, LEN(@CodePattern) + 1, 10) BETWEEN @RangeFrom AND @RangeTo
FOR XML PATH('')
), 1, 1, ''))
PRINT @Ids