SQL server中带条件的Case语句

SQL server中带条件的Case语句,sql,sql-server,Sql,Sql Server,我想调整以下SQL,以便查询将卡的类型(visa、mastercard等)输出为PaymentMethod,而不是信用卡 CASE WHEN pm.PaymentType = 1 THEN 'Cash' WHEN pm.PaymentType = 2 THEN 'Check' WHEN pm.PaymentType = 3 THEN 'Credit Card' WHEN pm.PaymentType = 4 THEN 'EFT'

我想调整以下SQL,以便查询将卡的类型(visa、mastercard等)输出为PaymentMethod,而不是信用卡

CASE    WHEN pm.PaymentType = 1 THEN 'Cash'
        WHEN pm.PaymentType = 2 THEN 'Check' 
        WHEN pm.PaymentType = 3 THEN 'Credit Card'
        WHEN pm.PaymentType = 4 THEN 'EFT'
        WHEN pm.PaymentType = 5 THEN 'Money Order'
        WHEN pm.PaymentType = 6 THEN 'Conveyance'
        ELSE 'Unknown'
        END AS PaymentMethod, 
谁能给我指一下正确的方向吗。我尝试在我的case语句中添加第二个条件,但对于3的所有支付类型,它都失败为“未知”

CASE    WHEN pm.PaymentType = 1 THEN 'Cash'
        WHEN pm.PaymentType = 2 THEN 'Check' 
        WHEN pm.PaymentType = 3 and pm.CardTypeMId = 1 THEN 'American Express'
        WHEN pm.PaymentType = 3 and pm.CardTypeMId = 2 THEN 'Discover'
        WHEN pm.PaymentType = 3 and pm.CardTypeMId = 3 THEN 'Mastercard'
        WHEN pm.PaymentType = 3 and pm.CardTypeMId = 4 THEN 'Visa'
        WHEN pm.PaymentType = 4 THEN 'EFT'
        WHEN pm.PaymentType = 5 THEN 'Money Order'
        WHEN pm.PaymentType = 6 THEN 'Conveyance'
        ELSE 'Unknown'
        END AS PaymentMethod, 

提前感谢您的帮助。

您可以简化这一过程

CASE pm.PaymentType 
    WHEN 1 THEN 'Cash'
    WHEN 2 THEN 'Check' 
    WHEN 3 THEN 
        CASE pm.CardTypeMId 
            WHEN 1 THEN 'American Express'
            WHEN 2 THEN 'Discover'
            WHEN 3 THEN 'Mastercard'
            WHEN 4 THEN 'Visa'
        END
    WHEN 4 THEN 'EFT'
    WHEN 5 THEN 'Money Order'
    WHEN 6 THEN 'Conveyance'
    ELSE 'Unknown'
END AS PaymentMethod

这可能是因为当
pm.PaymentType=3
时,
pm.CardTypeMId
不等于1、23或4


只需在pm.PaymentType=3时尝试
,然后对Visa行使用“Visa”
,您可以使用嵌套大小写

WHEN pm.PaymentType = 3 THEN 
 Case 
    WHEN pm.CardTypeMId = 1 THEN 'American Express'
    WHEN pm.CardTypeMId = 2 THEN 'Discover'
    WHEN pm.CardTypeMId = 3 THEN 'Mastercard'
    WHEN pm.CardTypeMId = 4 THEN 'Visa'
    END as CreditCard

很明显,你没有在下午1点、2点、3点或4点通过CardTypeID。 因此,您应该添加一个else子句来捕获以下内容:

Case pm.PaymentType 
    When 1 Then 'Cash'
    When 2 Then 'Check'
    When 4 Then 'EFT'
    When 5 Then 'Money Order'
    When 6 Then 'Conveyance' 
    When 3 Then Case pm.CardTypeMId 
                    When 1 Then 'American Express'
                    When 2 Then 'Discover'
                    When 3 Then 'Mastercard'
                    When 4 Then 'Visa'
                           Else 'Other Credit Card'
                End
           Else 'Unknown'
End As PaymentMethod

听起来像是
pm.CardTypeMId
可能不是1、2、3或4?IMO重复,在我看来很好,符合ANSI SQL语法。(然后在外壳的if 3中尝试一个CASE。)您可以这样简化它,但它们的原始查询在语法上是正确的,因此如果
pm.CardTypeMId
的值不是1-4,它仍然会返回
NULL
。我不知道为什么在没有真正解决主要问题的情况下会有这么多的追加投票,但我想它至少会确认数据是否有问题。是的,原始的语法是正确的。我也不太清楚为什么会有这么多人投票。我没有提到任何关于pm.CardTypeMId是否不匹配的问题,因为这已经包含在评论中了。也许看到NULL而不是“Unknown”可以提供他们想要的功能,或者让他们看到真正的问题。