如何使用一个案例不同的Update语句更新数据库中的多个记录。
refundNumber = CASE _
WHEN salesRecords.invNo='1' AND itemNo='250' AND length(refundNumber) > 1 THEN _
concat(refundNumber, ', 88' ) Else '88' _
WHEN salesRecords.invNo='1' AND itemNo='7095' AND length(refundNumber) > 1 THEN _
concat(refundNumber, ', 88' ) Else '88' _
END
这失败了,应该是这样的:
refundNumber = CASE _
WHEN invNo='1' AND itemNo='250' AND length(refundNumber) > 1 THEN _
concat(refundNumber, ', 88' ) _
WHEN invNo='1' AND itemNo='7095' AND length(refundNumber) > 1 THEN _
concat(refundNumber, ', 88' ) Else '88' _
END
不同之处在于Else最后才出现。
但它将所有记录的refundNumber
设置为88。
我要做的是将名为refundNumber
的字段的值添加到invNo = 'currentInvoiceNumber'
和itemNo = 'itemNumber'
但是,由于refundNumber
是一个包含逗号分隔列表的文本字段,我试图确定该字段是否为空,如果是,只需输入数字,如果它不是然后,将逗号前面的数字附加到现有字段内容。因此length(refundNumber) > 1 THEN concat(refundNumber, ', 88' )
位。
我没有测试过,但我相信我需要的VB逻辑是:
IF invNo='1' And itemNo='250' THEN
IF length(refundNumber) > 1 THEN
concat(refundNumber, ', 88' )
ELSE
'88'
END IF
ELSE IF invNo='1' And itemNo='7095' THEN
IF length(refundNumber) > 1 THEN
concat(refundNumber, ', 88' )
ELSE
'88'
END IF
Else
refundNumber '- leave the field value as is because it does not comply with any of the above conditions
END IF
我怎样才能将其翻译为SQL CASE
字符串?
答案 0 :(得分:2)
如果您不想更新InvNo不为“1”且itemNo不是“250”或“7095”的记录,为什么没有where子句将该限制设置为此条件?然后,您需要使用案例表达式连接退款编号和88,但您甚至不需要使用以下内容:
UPDATE yourtable
SET refundNumber = ISNULL(CONCAT(NULLIF(refundNumber, ''), ', 88'), '88')
WHERE InvNo = '1'
AND itemNo in ('250', '7095')
或者使用嵌套的case表达式?
答案 1 :(得分:0)
试试这个:
refundNumber = CASE _
WHEN invNo='1' AND itemNo='250' THEN _
CASE WHEN length(refundNumber) > 1 THEN concat(refundNumber, ', 88' ) _
ELSE '88' END
WHEN invNo='1' AND itemNo='7095' THEN _
CASE WHEN length(refundNumber) > 1 THEN concat(refundNumber, ', 88' ) _
Else '88' END
END
答案 2 :(得分:0)
如果你要用case来做,试试这个,但GarethD使用WHERE子句的答案可能更好
refundNumber = CASE WHEN (invNo='1' AND itemNo='250')
Or (invNo='1' AND itemNo='7095')
THEN
CASE WHEN length(refundNumber) > 1
THEN concat(refundNumber, ', 88' )
ELSE '88'
END
ELSE refundnumber
END