我有一张桌子,叫做solr。使用下面的Scripti将此更新为solr表。但在这里,我怀疑是否需要使用If ... Else条件。
我对这个没有任何想法。请帮助我。
UPDATE solr
SET Stock=
CASE
WHEN SUD.D_price='ABC'
OR SUD.D_price ='CDE'
AND WIS.StockID >0
THEN 'Y'
WHEN SUD.Display_price='XYZ '
OR SUD.Display_price ='PQR'
AND WIS.StockID >0
AND WI.StockName NOT LIKE '%GGR%'
THEN 'Y'
END
FROM InventoryItems WIS
JOIN solr SUD
ON WIS.ProductID=SUD.ProductId
JOIN WS_Inventory WI
ON WI.StockID=WIS.StockID
答案 0 :(得分:3)
我真的不明白你的问题,但我确实知道这一点......每当你在条件中混合使用OR时,你应该使用括号来控制操作的顺序。
CASE
WHEN (SUD.D_price='ABC' OR SUD.D_price ='CDE')
AND WIS.StockID >0
THEN 'Y'
WHEN (SUD.Display_price='XYZ' OR SUD.Display_price ='PQR')
AND WIS.StockID > 0
AND WI.StockName NOT LIKE '%GGR%'
THEN 'Y'
ELSE -- You should probably have some value here.
END
答案 1 :(得分:1)
你没有准确解释你想要什么,但我猜测你需要一个else
条款。如果要将值设置为'N'
,请使用:
UPDATE solr
SET Stock = (case when SUD.D_price = 'ABC' OR SUD.D_price = 'CDE' AND WIS.StockID > 0
THEN 'Y'
WHEN SUD.Display_price='XYZ ' OR SUD.Display_price='PQR' AND WIS.StockID>0 AND WI.StockName NOT LIKE '%GGR%'
THEN 'Y'
ELSE 'N'
end)
from solr SUD join
InventoryItems WIS
on WIS.ProductID = SUD.ProductId JOIN
WS_Inventory WI
ON WI.StockID = WIS.StockID;
也许你想要:
ELSE stock
这不会改变价值。您也可以在where
子句中添加条件,仅更新为Y
,如果这是您的意图。我认为不需要if
。
答案 2 :(得分:1)
根本不知道数据,但我的猜测是你嵌套的ANDs和ORs弄乱它使用paranthesis来强制它们被评估的顺序,因为默认行为不是优先于AND,并且优先于OR。
NOT - > AND - >或者
如果你不太注意sql server将以什么顺序评估每个表达式,这可能会有点混乱。使用Paranthesis使得更简单。UPDATE SUD
SET SUD.Stock = CASE
WHEN (SUD.D_price='ABC' OR SUD.D_price ='CDE')
AND WIS.StockID > 0
THEN 'Y'
WHEN (SUD.Display_price='XYZ ' OR SUD.Display_price ='PQR')
AND WIS.StockID > 0 AND WI.StockName NOT LIKE '%GGR%'
THEN 'Y'
--ELSE 'N' --<-- Default value
END
FROM InventoryItems WIS INNER JOIN solr SUD
ON WIS.ProductID = SUD.ProductId
INNER JOIN WS_Inventory WI
ON WI.StockID = WIS.StockID
答案 3 :(得分:0)
您可以添加ELSE
..
UPDATE solr
SET Stock = CASE WHEN SUD.D_price = 'ABC'
OR SUD.D_price = 'CDE'
AND WIS.StockID > 0 THEN 'Y'
WHEN SUD.Display_price = 'XYZ '
OR SUD.Display_price = 'PQR'
AND WIS.StockID > 0
AND WI.StockName NOT LIKE '%GGR%' THEN 'Y'
ELSE 'N'
END
FROM InventoryItems WIS
JOIN solr SUD ON WIS.ProductID = SUD.ProductId
JOIN WS_Inventory WI ON WI.StockID = WIS.StockID
我在这种情况下只假设N
。