SQL:检索具有多个属性的唯一ID

时间:2011-05-10 12:48:18

标签: sql sql-server-2005

好的,我无法描述这个。我有:

material table (materialID, material, etc...)
ThicknessRange table (ThicknessRangeID, ThicknessRange)
MaterialThicknessRange table (MaterialID, ThicknessRangeID)

我正在尝试从MaterialThicknessRange表中检索适合所有必需ThicknessRangeID的所有MaterialID。

例如,任何MaterialID with ThicknessRangeID 1 AND ThicknessRangeID 2等具有可变数量的ThicknessRangeID(从用户的复选框中选择)。

提前致谢。

2 个答案:

答案 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