0
내에서 IIF 내 절에서 나는 이런 식으로 뭔가를 찾고 있어요 NOT :는 WHERE 절
CREATE FUNCTION [Aftermarket].[ft_Filter_V41_HubAssembly_AxleStudThreads_DEV] (
@SearchTokens dbo.SearchTokenTableType READONLY,
@AftermarketHubAssemblyNumbers dbo.ConMetPartNumberTableType READONLY,
@TruckCompartmentIds dbo.IntegerTableType READONLY,
@TruckMakeIds dbo.IntegerTableType READONLY,
@AxleNameIds dbo.IntegerTableType READONLY,
@GrossAxleWeightRatingRangeIds dbo.IntegerTableType READONLY,
@AxleStudThreadIds dbo.IntegerTableType READONLY,
@WheelMaterialStudLengthClassIds dbo.IntegerTableType READONLY,
@HubCastingMaterialTypeIds dbo.IntegerTableType READONLY,
@HubAssemblyTypeIds dbo.IntegerTableType READONLY,
@ExcludeProvidedValues BIT = 1
)
RETURNS TABLE
RETURN
SELECT DISTINCT v.AxleStudThreadId AS Id,
CASE v.AxleStudThreadId WHEN 0 THEN N'—' ELSE th.ThreadDesignation END AS Designation,
bt.DiameterValue AS DiameterInch,
CASE v.AxleStudThreadId WHEN 0 THEN N'—'
WHEN 6 THEN N'3/4'
WHEN 8 THEN N'5/8'
ELSE th.ThreadDesignation
END AS NominalDiameter
FROM Aftermarket.vFilters_V3_HubAssemblies AS v
JOIN Stud.Threads AS th ON v.AxleStudThreadId = th.Id
JOIN Stud.BaseThreads AS bt ON th.BaseThreadId = bt.Id
WHERE (((SELECT COUNT(PartNumber) FROM @AftermarketHubAssemblyNumbers) = 0) OR v.HubAssemblyNumber IN (SELECT PartNumber FROM @AftermarketHubAssemblyNumbers))
AND (((SELECT COUNT(Value) FROM @TruckCompartmentIds) = 0) OR v.TruckCompartmentId IN (SELECT Value FROM @TruckCompartmentIds ))
AND (((SELECT COUNT(Value) FROM @TruckMakeIds) = 0) OR v.TruckMakeId IN (SELECT Value FROM @TruckMakeIds ))
AND (((SELECT COUNT(Value) FROM @AxleNameIds) = 0) OR v.AxleNameId IN (SELECT Value FROM @AxleNameIds ))
AND (((SELECT COUNT(Value) FROM @GrossAxleWeightRatingRangeIds) = 0) OR v.GawrRangeId IN (SELECT Value FROM @GrossAxleWeightRatingRangeIds ))
AND (((SELECT COUNT(Value) FROM @AxleStudThreadIds) = 0) OR IIF(@ExcludeProvidedValues = 1,
v.AxleStudThreadId NOT IN (SELECT Value FROM @AxleStudThreadIds),
v.AxleStudThreadId IN (SELECT Value FROM @AxleStudThreadIds))
)
AND (((SELECT COUNT(Value) FROM @WheelMaterialStudLengthClassIds) = 0) OR v.WheelMaterialStudLengthClassId IN (SELECT Value FROM @WheelMaterialStudLengthClassIds ))
AND (((SELECT COUNT(Value) FROM @HubCastingMaterialTypeIds) = 0) OR v.HubCastingMaterialTypeId IN (SELECT Value FROM @HubCastingMaterialTypeIds ))
AND (((SELECT COUNT(Value) FROM @HubAssemblyTypeIds) = 0) OR v.HubAssemblyTypeId IN (SELECT Value FROM @HubAssemblyTypeIds ))
AND ((SELECT COUNT(Token)
FROM @SearchTokens
WHERE ((LEN(Token) > 0) AND ((CAST(CHARINDEX(Token, th.ThreadDesignation) AS INT) > 0)))) = (SELECT COUNT(Token) FROM @SearchTokens WHERE LEN(Token) > 0))
이 잘못된 T-SQL 구문입니다. 어디서 표현할 수 있습니까? IIF (cond, Field NOT IN ...) 같은 효과를 얻으려는 아이디어가 있습니까?
IIF(@ExcludeProvidedValues = 1,
v.AxleStudThreadId NOT IN (SELECT Value FROM @AxleStudThreadIds),
v.AxleStudThreadId IN (SELECT Value FROM @AxleStudThreadIds))
)
불행히도, 나는 문제를 올바르게 제기하지 않았습니다. 거짓 조건에 대해 1 대신에, 나는 참 조건에서 NOT IN (SELECT Value ...) 문에 대응하기 위해 IN (SELECT Value ...) 문을 사용했습니다. 나는 다른 길을 찾았다. – CalvinDale
나는이 감독을 분명히하기 위해 질문을 수정했다. – CalvinDale