SQL: получение уникального идентификатора с несколькими атрибутами - PullRequest
0 голосов
/ 10 мая 2011

Хорошо, у меня были проблемы с описанием этого.У меня есть:

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

Я пытаюсь извлечь все идентификаторы MaterialID из таблицы MaterialThicknessRange, которые соответствуют всем требуемым ThicknessRangeID.

Например, любые MaterialID with ThicknessRangeID 1 AND ThicknessRangeID 2 и т. Д. С переменным числом ThicknessRangeID(выбран из флажков пользователем).

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 мая 2011

Я использую что-то вроде этого

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

end

0 голосов
/ 10 мая 2011

Вы гарантированно имеете только одну запись в таблице MaterialThicknessRange для данной комбинации Material / ThicknessRange?

SELECT MaterialID, COUNT(MaterialID) As NumMaterialThicknesses
FROM MaterialThicknessRange
WHERE ThicknessRangeID IN (1, 2)
GROUP BY MaterialID
HAVING COUNT(MaterialID) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...