如何解决我正在尝试找到将IN与LIKE一起用于多种条件的方法
我想避免执行嵌套的CASE THEN ELSE
语句。我想使用IN()
,但是我不知道是否可以将其与LIKE()
结合使用。这样一来,就无需使用深层嵌套的case语句,并且无需添加/删除/修改条件。
这就是我想要的:
CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'Kel%')
THEN 2
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'RMA%')
THEN 3
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE IN('DC%','BT%','HF%'))
THEN 5
ELSE NULL
END
END
END AS OrderType
这就是我所拥有的:
CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'Kel%')
THEN 2
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'RMA%')
THEN 3
ELSE CASE
WHEN(dbo.OrderDetail.OrderNumber LIKE 'DC%')
THEN 5
ELSE CASE WHEN(dbo.OrderDetail.OrderNumber LIKE'BT%')
THEN 5
ELSE CASE WHEN(dbo.OrderDetail.OrderNumber LIKE 'HF%')
THEN 5
ELSE
NULL
END END END
END
END AS OrderType
解决方法
假设您对该表使用别名,则可以紧凑地编写它:
FROM dbo.OrderDetail as od
...
WHERE
CASE
WHEN od.OrderNumber LIKE 'Kel%' THEN 2
WHEN od.OrderNumber LIKE 'RMA%' THEN 3
WHEN od.OrderNumber LIKE 'DC%' THEN 5
WHEN od.OrderNumber LIKE 'BT%' THEN 5
WHEN od.OrderNumber LIKE 'HF%' THEN 5
END AS OrderType
虽然我认为几乎没有理由这样做,但可以合并产生相同值的案例:
CASE
WHEN od.OrderNumber LIKE 'Kel%' THEN 2
WHEN od.OrderNumber LIKE 'RMA%' THEN 3
WHEN od.OrderNumber LIKE 'DC%'
OR od.OrderNumber LIKE 'BT%'
OR od.OrderNumber LIKE 'HF%' THEN 5
END AS OrderType
由于您正在处理最左边的两个字符,因此还有另一种选择:
CASE
WHEN od.OrderNumber LIKE 'Kel%' THEN 2
WHEN od.OrderNumber LIKE 'RMA%' THEN 3
WHEN LEFT(od.OrderNumber,2) IN ('DC','BT','HF') THEN 5
END AS OrderType
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。