使用多个联接和case语句处理更新查询。我一直收到错误“关键字'AND'附近的语法不正确。”
我已重新安排我的联接以避免子查询,但无法解决此问题。
代码:
UPDATE a
SET a.[FldrInit] =
(CASE a.FldrInit
WHEN '889' AND d.GisCode LIKE 'HAP%' OR d.GisCode LIKE 'SAP%' THEN '889G1Pt'
WHEN '889' AND d.GisCode LIKE 'HAS%' OR d.GisCode LIKE 'SAS%' THEN '889G1Road'
WHEN '889' AND d.GisCode LIKE 'A????' THEN '889ProxixPt'
WHEN '889' AND d.gis LIKE 'R????' THEN '889ProxixRoad'
WHEN '883' THEN '883'
WHEN '885' THEN '885'
WHEN '886' THEN '886'
WHEN '887' THEN '887'
WHEN '900' THEN '900'
WHEN '902' THEN '902'
ELSE 'Other'
END)
FROM [dbo].[QCOrders_temp] as a
INNER JOIN [dbo].[QCCloneOrders] as b
ON b.NewOrdnum=a.OrdDte
INNER JOIN [TOD].[dbo].[CurrentOrders] as c
ON c.Ordnum = b.OrigOrdnum
INNER JOIN [TOD].[dbo].[Addr] as d
ON d.RecNumAddr = c.RecNumAddr
WHERE a.FldrInit IS NULL
修改 @BhupeshC修复了错误,除了现在我得到一个新的 - “关键字'END'附近的语法不正确”。有什么想法吗?
UPDATE a
SET a.[FldrInit] =
CASE
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'HAS%' OR d.GisCode LIKE 'SAS%' THEN '889G1Road'
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'A????' THEN '889ProxixPt'
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'R????' THEN '889ProxixRoad'
WHEN a.FldrInit IN ('883', '885', '886', '887', '900', '902') THEN a.FldrInit
ELSE 'Other'
END
FROM [dbo].[QCOrders_temp] as a
INNER JOIN [dbo].[QCCloneOrders] as b
ON b.NewOrdnum=a.OrdDte
INNER JOIN [TOD].[dbo].[CurrentOrders] as c
ON c.Ordnum = b.OrigOrdnum
INNER JOIN [TOD].[dbo].[Addr] as d
ON d.RecNumAddr = c.RecNumAddr
WHERE a.FldrInit IS NULL
答案 0 :(得分:2)
使用以下内容修改CASE
声明: -
CASE
WHEN a.FldrInit = '889' AND (d.GisCode LIKE 'HAP%' OR d.GisCode LIKE 'SAP%') THEN '889G1Pt'
WHEN a.FldrInit = '889' AND (d.GisCode LIKE 'HAS%' OR d.GisCode LIKE 'SAS%') THEN '889G1Road'
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'A????' THEN '889ProxixPt'
WHEN a.FldrInit = '889' AND d.gis LIKE 'R????' THEN '889ProxixRoad'
WHEN a.FldrInit IN ('883','885','886', '887', '900', '902') THEN a.FldrInit
ELSE 'Other'
END
修改强>
错误的原因是 - 您的case
语句有a.FldrInit
作为进一步检查。因此,您无法在其他列上添加多个条件。所以你可以使用上面提到的语法。