好的,我无法描述这个。我有:
material table (materialID, material, etc...)
ThicknessRange table (ThicknessRangeID, ThicknessRange)
MaterialThicknessRange table (MaterialID, ThicknessRangeID)
我正在尝试从MaterialThicknessRange表中检索适合所有必需ThicknessRangeID的所有MaterialID。
例如,任何MaterialID with ThicknessRangeID 1 AND ThicknessRangeID 2
等具有可变数量的ThicknessRangeID(从用户的复选框中选择)。
提前致谢。
答案 0 :(得分:0)
对于给定的Material / ThicknessRange组合,您是否保证在MaterialThicknessRange表中只有一个条目?
SELECT MaterialID, COUNT(MaterialID) As NumMaterialThicknesses
FROM MaterialThicknessRange
WHERE ThicknessRangeID IN (1, 2)
GROUP BY MaterialID
HAVING COUNT(MaterialID) > 1
答案 1 :(得分:0)
我正在使用这样的东西
select MaterialID from MaterialThicknessRange MTR inner join
dbo.TransformCSVToTable('1,2,15') IDs on MTR.ThiknessRangeID = IDs.ID
其中dbo.TransformCSVToTable是用户定义的函数,用于将csv字符串转换为单列表。贝娄是这种功能的一个样本
ALTER FUNCTION [dbo].[fn_IntegerParameterListFromString]
(
@IntegerParameterList varchar(max)
)
RETURNS @result TABLE (IntegerID int)
AS
begin
declare @temp table (IntegerID int)
declare @s varchar(max), @s1 varchar(10)
declare @len int
set @len =len(@IntegerParameterList)
set @s = @IntegerParameterList
if (right(@s,1)<>',') set @s = @s +','
while @s<>''
begin
set @s1 = substring(@s,1,charindex(',',@s)-1)
if (isnumeric(@s1)= 1)
insert @result (IntegerID) Values ( Cast(@s1 as int))
if (CHARINDEX(',',@s)>0)
begin
set @s = substring (@s, charindex(',',@s)+1, @Len)
end
else
begin
if isnumeric(@s) = 1
insert @result (IntegerID) Values ( Cast(@s as int))
set @s = ''
end
end
return
端