案例表达只显示一次

问题描述 投票:0回答:2

我有一个案例表达,我有困难:

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。我究竟做错了什么?

sql-server
2个回答
1
投票

如果你想要其中一个或两个,那么它需要是两个单独的列,或者如果你想要一个列包含两个输出:

或者:

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'

0
投票

返回的值将是匹配的最早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'
© www.soinside.com 2019 - 2024. All rights reserved.