2016-06-29 3 views
0

私はQuotedRate(REQUIRED)を一覧表示し、パラメータとしてBillIDを受け取り、テーブルを返すSQL Serverの機能を(一つだけの行でなければなりません)を作成する必要があるとDiscountAmount OR DiscountPercent、両方ではありません。SQL Serverの:表示列の場合NOT NULL

BillIDDiscountAmount OR DiscountPercentのいずれかですが、両方ではありません。そのうちの1つはNULLになります。

QuotedRateと上記のDiscountのいずれかの列(いずれかがNULLでない方)のいずれかと一緒にリストされたテーブルを返すにはどうすればよいですか?どんな助けもありがとう。それがコードを入力するために少し難しいですので、私の携帯電話に私は

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

「DiscountAmount」と「DiscountPercent」の両方が「NULL」の場合はどうなりますか –

答えて

0

はここで、これまでに私のコードです。​​3210機能を使用するだけです。したがって、あなたはただ一つの選択を必要とします:

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

あなたの問題はSQLではなく、論理です。

あなたが正常に動作する必要があります

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

あなたのロジックを処理する必要があります。 IFまたはSELECT文を使用することができます。それぞれの場合に何をするかを決めるだけで済みます。

0

TYPE列を追加して、量またはパーセントかどうかを知ることができます。私はこれがあなたのケースにとって貴重だと思います。また、量とパーセントの両方がNULLの場合、これもうまくいくはずです。

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 
関連する問題