Я пытаюсь сделать сложную формулу в SQL с вложенной функцией IIF. В этой формуле много IFF. Но почему-то запрос Microsoft не будет принимать оператор:
SELECT
IIF (system_Machine.Machine_omschrijving IN ('BE'),
IIF (PD_FleeceRecipe.FleeceRecipe_IntermediateLayer1Width is NULL,
IIF (PD_FleeceRecipe.FleeceRecipe_BottomLayerWidth is NULL, PD_FleeceRecipe.FleeceRecipe_IntermediateLayer2Width, PD_FleeceRecipe.FleeceRecipe_BottomLayerWidth)
,
IIF(PD_FleeceRecipe.FleeceRecipe_BottomLayerWidth is NULL,
IIF(PD_FleeceRecipe.FleeceRecipe_IntermediateLayer1Width is NULL, PD_FleeceRecipe.FleeceRecipe_BottomLayerWidth, PD_FleeceRecipe.FleeceRecipe_IntermediateLayer1Width)
,
PD_FleeceRecipe.FleeceRecipe_BottomLayerWidth-PD_FleeceRecipe.FleeceRecipe_IntermediateLayer2Width+PD_FleeceRecipe.FleeceRecipe_IntermediateLayer1Width-PD_FleeceRecipe.FleeceRecipe_IntermediateLayer2Width)
)))
[res] ,
PD_Packaging.Packaging_Itemnr,
PD_Packaging.Packaging_Description,
PD_Packaging.Packaging_Width,
PD_Packaging.Packaging_Weight,
PD_Packaging.Packaging_Weightgm2,
PD_Packaging.Packaging_Overlap,
PD_Packaging.Packaging_Verstrekking,
PD_Packaging.Packaging_CategoryName,
PD_Main.Main_StatusID,
PD_Main.Main_Itemnr,
system_Machine.Machine_omschrijving,
PD_Main.Main_Product,
PD_Main.Main_WidthTobeInvoiced,
PD_Main.Main_AssemblingRollDiameter,
PD_Main.Main_AssemblingRollLength,
PD_Main.Main_LabelArea,
PD_FleeceRecipe.FleeceRecipe_IntermediateLayer1Width,
PD_FleeceRecipe.FleeceRecipe_IntermediateLayer2Width,
PD_FleeceRecipe.FleeceRecipe_BottomLayerWidth
FROM testsystemOBB.dbo.PD_Packaging PD_Packaging
LEFT OUTER JOIN testsystemOBB.dbo.PD_Main
ON PD_Packaging.Packaging_ID = PD_Main.Main_AssemblingPackagingSingleRollID AND PD_Main.Main_StatusID = 2
LEFT OUTER JOIN testsystemOBB.dbo.PD_FleeceRecipe
ON PD_Main.Main_ID = PD_FleeceRecipe.FleeceRecipe_MainID AND FleeceRecipe_Preferred = 1
LEFT OUTER JOIN testsystemOBB.dbo.BOM_Results
ON PD_Main.Main_Itemnr = BOM_Results.Item_Number
LEFT OUTER JOIN testsystemOBB.dbo.system_Machine
ON BOM_Results.SelMachineID = system_Machine.Machine_id
WHERE (PD_Packaging.Packaging_CategoryName='STRETCH') AND (PD_Main.Main_Itemnr = 406181)
Я также попробовал небольшой пример с другой функцией ISNULL, но в результате получается «Неожиданный RES за списком столбцов выбора». Я не понимаю в чем моя ошибка.
SELECT
IIF (system_Machine.Machine_omschrijving IN ('BE'),
IIF (ISNULL(FleeceRecipe_IntermediateLayer1Width), 3,4))
[res] ,
PD_Packaging.Packaging_Itemnr,
PD_Packaging.Packaging_Description,
PD_Packaging.Packaging_Width,
PD_Packaging.Packaging_Weight,
PD_Packaging.Packaging_Weightgm2,
PD_Packaging.Packaging_Overlap,
PD_Packaging.Packaging_Verstrekking,
PD_Packaging.Packaging_CategoryName,
PD_Main.Main_StatusID,
PD_Main.Main_Itemnr,
system_Machine.Machine_omschrijving,
PD_Main.Main_Product,
PD_Main.Main_WidthTobeInvoiced,
PD_Main.Main_AssemblingRollDiameter,
PD_Main.Main_AssemblingRollLength,
PD_Main.Main_LabelArea,
PD_FleeceRecipe.FleeceRecipe_IntermediateLayer1Width,
PD_FleeceRecipe.FleeceRecipe_IntermediateLayer2Width,
PD_FleeceRecipe.FleeceRecipe_BottomLayerWidth
FROM testsystemOBB.dbo.PD_Packaging PD_Packaging
LEFT OUTER JOIN testsystemOBB.dbo.PD_Main
ON PD_Packaging.Packaging_ID = PD_Main.Main_AssemblingPackagingSingleRollID AND PD_Main.Main_StatusID = 2
LEFT OUTER JOIN testsystemOBB.dbo.PD_FleeceRecipe
ON PD_Main.Main_ID = PD_FleeceRecipe.FleeceRecipe_MainID AND FleeceRecipe_Preferred = 1
LEFT OUTER JOIN testsystemOBB.dbo.BOM_Results
ON PD_Main.Main_Itemnr = BOM_Results.Item_Number
LEFT OUTER JOIN testsystemOBB.dbo.system_Machine
ON BOM_Results.SelMachineID = system_Machine.Machine_id
WHERE (PD_Packaging.Packaging_CategoryName='STRETCH') AND (PD_Main.Main_Itemnr = 406181)