Если я правильно понимаю ваш вопрос, приведенный ниже код должен работать.Обратите внимание, что я создал функцию, которая поможет с конкатенацией строк.Я не уверен, хотите ли вы И или ИЛИ ваши условия.Я использовал AND в моем образце.Вы можете легко настроить его для ИЛИ, если это подходит.
/* Set up sample data */
create table FilterData (
CategoryID char(4),
ColumnID char(3),
AnswerCode char(2)
)
insert into FilterData
(CategoryID, ColumnID, AnswerCode)
values
('0349','Q15','02')
insert into FilterData
(CategoryID, ColumnID, AnswerCode)
values
('0349','Q15','03')
insert into FilterData
(CategoryID, ColumnID, AnswerCode)
values
('0349','Q16','04')
go
/* Helper function to concatenate all AnswerCodes for a given ColumnID */
create function dbo.fnStringAnswerCodes(@ColumnID char(3))
returns varchar(1000)
as
begin
declare @CodeString varchar(1000)
set @CodeString = @ColumnID + ' in ('
select @CodeString = @CodeString + '''' + AnswerCode + ''','
from FilterData
where ColumnID = @ColumnID
/* Remove trailing comma and add closing parens */
select @CodeString = left(@CodeString, len(@CodeString)-1) + ')'
return @CodeString
end
go
declare @CategoryID char(4)
declare @SQLString varchar(1000)
declare @WhereClause varchar(1000)
set @CategoryID = '0349'
set @SQLString = 'select * from TransactionData '
set @WhereClause = 'where CategoryID=''' + @CategoryID + ''' and '
select @WhereClause = @WhereClause + dbo.fnStringAnswerCodes(ColumnID) + ' and '
from FilterData
where CategoryID = @CategoryID
group by ColumnID
/* Remove Trailing 'AND' */
set @WhereClause = LEFT(@WhereClause, len(@WhereClause)-3)
set @SQLString = @SQLString + @WhereClause
select @SQLString
/* Last step would be to dynamically execute the string we built */
/* exec sp_ExecuteSQL @SQLString */
/* Clean Up */
drop function dbo.fnStringAnswerCodes
drop table FilterData