我有一个案例表达,我有困难:
WHEN @CustomerID = 3 AND @OrderID = 2 AND @Name IN ('Hello') THEN 'Regular'
WHEN @CustomerID = 3 AND @OrderID = 2 AND @Telephone = 1 AND @Name IN ('Hello') THEN 'Business'
如果我有两个语句,它只返回'Regular',但如果我取出'Regular',它会显示Business。我究竟做错了什么?
如果你想要其中一个或两个,那么它需要是两个单独的列,或者如果你想要一个列包含两个输出:
或者:
case WHEN @CustomerID = 3 AND @OrderID = 2 AND @Name IN ('Hello') THEN 'Regular' end,
case WHEN @CustomerID = 3 AND @OrderID = 2 AND @Telephone = 1 AND @Name IN ('Hello') THEN 'Business' end
要么:
WHEN @CustomerID = 3 AND @OrderID = 2 AND @Telephone = 1 AND @Name IN ('Hello') THEN 'Regular, Business'
WHEN @CustomerID = 3 AND @OrderID = 2 AND @Name IN ('Hello') THEN 'Regular'
返回的值将是匹配的最早WHEN子句(文本)的THEN表达式的值。
在您的查询中,Second WHEN子句包含First WHEN子句的一部分。这意味着,只要第二个为真,第一个WHEN条款就会成立。然后返回那个表达式(第一个)WHEN条款。
查询-1:
SELECT CASE WHEN @CustomerID = 3 AND @OrderID = 2 AND @Name IN ('Hello') THEN 'Regular'
WHEN @CustomerID = 3 AND @OrderID = 2 AND @Telephone = 1 AND @Name IN ('Hello') THEN 'Business' END
查询-2:
SELECT CASE WHEN @CustomerID = 3 AND @OrderID = 2 AND @Telephone = 1 AND @Name IN ('Hello') THEN 'Business'
WHEN @CustomerID = 3 AND @OrderID = 2 AND @Name IN ('Hello') THEN 'Regular' END
输入:
@CustomerID INT=3
@OrderID INT = 2
@Name VARCHAR(100)='Hello'
@Telephone INT=1
输出:
Query1 : 'Regular'
Query1 : 'Business'
输入:
@CustomerID INT=3
@OrderID INT = 2
@Name VARCHAR(100)='Hello'
@Telephone INT=0
输出:
Query1 : 'Regular'
Query1 : 'Regular'