如果我正確理解你的問題,下面的代碼應該工作。請注意,我創建了一個函數來幫助字符串連接。我不確定你是否想要和或或你的條件。我在我的示例中使用了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
不是真的明白你想要建立什麼嗎? – Shlomo 2010-08-10 14:58:11