SQL Server:显示列,如果NOT NULL

时间:2016-06-29 20:30:14

标签: sql-server

我需要创建一个SQL Server函数,它接受BillID作为参数并返回一个表(应该只有一行),列出QuotedRate(REQUIRED)和{{1}或者DiscountAmount,但不是两者。

每个DiscountPercent都有BillIDDiscountAmount,但不是两者。其中一个将是NULL。

如何返回列出DiscountPercent的表以及上述QuotedRate列之一(哪一个不为NULL)?任何帮助将不胜感激。

到目前为止,这是我的代码:

Discount

3 个答案:

答案 0 :(得分:0)

我在手机上,因此输入代码有点困难。您只需使用coalesce功能即可。因此,您只需要一个选择:

RETURN (SELECT QuotedRate, coalesce(DiscountAmount, DiscountPercent) FROM Bill WHERE BillID = @BillID)

答案 1 :(得分:0)

你的问题不是SQL,这是逻辑。

你需要处理

No Rate & No Amount
No Rate & Amount
Rate & No Amount
Rate & Amount

你的逻辑应该可以正常工作。您可以使用IF或SELECT语句,您只需要决定在每种情况下您将做什么。

答案 2 :(得分:0)

我添加了一个TYPE列,以便您知道它是一个数量还是百分比。我认为这对你的案子很有价值。此外,如果金额和百分比都为空,这也应该有效。

    CREATE FUNCTION dbo.fn_ApplyDiscounts(@BillID smallint)
    RETURNS 
    @ReturnTable TABLE(
    QuotedRate decimal(8,2),
    Discount decimal (8,2),
    TheType char(1)    
    )

    AS
    BEGIN

    INSERT INTO @ReturnTable (QuotedRate, Discount, TheType)
    SELECT 
    QuotedRate, 
    COALESCE(DiscountAmount, DiscountPercent, '') as Discount,
    CASE 
        WHEN DiscountAmount IS NOT NULL THEN'A' 
        WHEN DiscountPercent IS NOT NULL THEN 'P' 
        ELSE NULL
    END as TheType 
    FROM Bill
    WHERE BillID = @BillID

 RETURN
 END