2016-06-29 10 views
0

Ich brauche eine SQL-Server-Funktion zu erstellen, die ein BillID als Parameter akzeptiert und gibt eine Tabelle (sollte nur eine Zeile sein), die Listen ein QuotedRate (erforderlich) und ein DiscountAmount OR DiscountPercent, aber nicht beide.SQL Server: Anzeige Spalte, wenn NOT NULL

Jede BillID hat entweder eine DiscountAmount OR DiscountPercent, aber NICHT beides. Einer von ihnen wird NULL sein.

Wie gebe ich eine Tabelle zurück, die eine QuotedRate zusammen mit einer der oben genannten Discount Spalten (welche nicht NULL) ist? Jede Hilfe wäre willkommen.

Hier ist mein Code so weit:

CREATE FUNCTION dbo.fn_ApplyDiscounts(@BillID smallint) 
RETURNS TABLE 
AS 
    --IF DiscountAmount IS NOT NULL 
    RETURN (SELECT QuotedRate, DiscountAmount 
      FROM Bill 
      AND BillID = @BillID) 

    --ELSE IF DiscountPercent IS NOT NULL 

    RETURN (SELECT QuotedRate, DiscountPercent 
      FROM Bill 
      AND BillID = @BillID) 
+1

was passiert, wenn sowohl 'DiscountAmount' als auch' DiscountPercent' 'NULL' sind –

Antwort

0

ich auf meinem Handy bin, so ist es ein bisschen schwierig ist, den Code einzugeben. Sie müssen nur die coalesce Funktion verwenden. Daher brauchen Sie nur eine einzige Auswahl:

0

Ihr Problem ist nicht SQL, es ist Logik.

Sie benötigen

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

Ihre Logik zu handhaben sollte funktionieren. Sie können IF- oder SELECT-Anweisungen verwenden, Sie müssen nur entscheiden, was Sie in jedem Fall tun werden.

0

Ich habe eine Spalte TYPE hinzugefügt, so dass Sie wissen, ob es eine Menge oder Prozent ist. Ich denke, das wäre für Ihren Fall wertvoll. Für den Fall, dass sowohl der Betrag als auch der Prozentsatz Null sind, sollte dies auch funktionieren.

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