1

次のような顧客割引テーブルがあります。 ここに画像の説明を入力

合計金額を格納するために、@Total という名前の deeared varialbe があります。

declare @Total numeric (12,2)

set @Total = (select Sum(LaborAmt) from #Data
              group by Co) 

@Total に従って修正された discountRate を取得するクエリを作成する必要があります。つまり、合計金額が 3500000 の場合、2 を返す必要があります。

SELECT     dbo.budCustomerDisc.Customer, dbo.budCustDiscRate.DiscountRate
FROM         dbo.budCustDiscRate INNER JOIN
                  dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo
WHERE     (dbo.budCustomerDisc.Customer = 165) .........

申し訳ありませんが、それを書かなければならないことを知りません

4

2 に答える 2

2
SELECT    budCustomerDisc.Customer, budCustDiscRate.DiscountRate
FROM      budCustDiscRate 
INNER JOIN dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo
WHERE     budCustomerDisc.Customer = 165 
             And BegBillAmt <= @Total
             And EndBillAmt >= @Total 
于 2013-02-26T19:19:15.520 に答える
1

ここで重要なことは、@Total が BegBillAmt と EndBillAmt の間にある場合に値を返すことを探しているということです。正しい割引率を返す必要があります。これを行うには、BETWEEN ステートメント、または BegBillAmt をチェックするステートメントと EndBill Amt をチェックするステートメントの 2 つのステートメントのいずれかが必要です。両方を説明します:

最初に BETWEEN を使用:

 SELECT     dbo.budCustomerDisc.Customer, dbo.budCustDiscRate.DiscountRate
 FROM         dbo.budCustDiscRate INNER JOIN
              dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo

 WHERE (dbo.budCustomerDisc.Customer = 165) AND @TOTAL BETWEEN BegBillAmt AND EndBillAmt

BETWEEN が不明確な場合があります (SQL Server の外部でサポートされているかどうか、または静的変数ではなくデータベース フィールドであるようなケースでサポートされているかどうかはわかりません)。したがって、ここに2つのチェックがあります。

 SELECT     dbo.budCustomerDisc.Customer, dbo.budCustDiscRate.DiscountRate
 FROM         dbo.budCustDiscRate INNER JOIN
              dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo


 WHERE  (dbo.budCustomerDisc.Customer = 165) AND BegBillAmt >= @Total AND EndBillAmt <= @Total

これがあなたのために物事を明確にするのに役立つことを願っています.

于 2013-02-26T19:19:17.097 に答える