我需要创建一个SQL Server函数,它接受BillID
作为参数并返回一个表(应该只有一行),列出QuotedRate
(REQUIRED)和{{1}或者DiscountAmount
,但不是两者。
每个DiscountPercent
都有BillID
或DiscountAmount
,但不是两者。其中一个将是NULL。
如何返回列出DiscountPercent
的表以及上述QuotedRate
列之一(哪一个不为NULL)?任何帮助将不胜感激。
到目前为止,这是我的代码:
Discount
答案 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