SQL服务器中带有条件的案例语句

时间:2015-05-28 15:08:20

标签: sql sql-server

我想调整以下SQL,以便查询将输出卡的类型(签证,万事达卡等)作为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, 

有人可以指出我正确的方向。我尝试在我的案例陈述中添加第二个条件,但它未能通过“未知”#39;适用于所有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, 

提前感谢您的协助。

4 个答案:

答案 0 :(得分:11)

你可以简化这一点。

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

答案 1 :(得分:2)

您可以使用嵌套CASE

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

答案 2 :(得分:0)

这可能是因为pm.CardTypeMIdpm.PaymentType = 3不等于1,2 3或4。

只需尝试WHEN pm.PaymentType = 3 THEN 'Visa'获取Visa行

答案 3 :(得分:0)

很明显,你没有将1,2,3或4传递给pm.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