SQL使用CASE将条件存储为另一个表中的值

时间:2018-05-25 20:57:26

标签: sql-server-2008

我希望我能够忽略一些非常简单的问题。我有一个费用计算查询,我需要编写,利用许多表中的规则来计算。其中一个表格定义了特定费用适用的条件。我希望避免使用动态SQL但是如果需要它请注意我在主程序中使用了几个CTE。

我已将存储过程简化为以下内容,以便很好地说明问题。我需要将[Formula]的内容应用为case语句中的布尔表达式,但我仍然收到错误:

  

在预期条件的上下文中指定的非布尔类型的表达式,接近' THEN'

如果将字段公式替换为实际内容,则可以根据需要使用。

CREATE TABLE #FeeRule
(
     FeeRuleID INT IDENTITY,
     FeeName NVARCHAR(50),
     FeeRate DECIMAL(10,2)
)

INSERT INTO #FeeRule
    SELECT 'FlatFee', 450.00

CREATE TABLE #FeeCondition
(
     ConditionID INT IDENTITY,
     FeeRuleID INT,
     Formula NVARCHAR(255)
)

INSERT INTO #FeeCondition
    SELECT 1, 'StockType = 1'

CREATE TABLE #Accounts 
(
     ID INT IDENTITY, 
     AcctName NVARCHAR(200), 
     StockType INT
)

INSERT INTO #Accounts
    SELECT 'Account One', 0 UNION ALL 
    SELECT 'Account Two', 1

SELECT 
    AcctName,
    Fee = CASE 
             WHEN Formula IS NULL
                THEN FeeRate 
             ELSE 
                CASE WHEN Formula -- StockType = 1 --
                        THEN FeeRate
                        ELSE 0 
                END
          END
FROM 
    #Accounts A
JOIN 
    #FeeRule B ON 1 = 1
LEFT JOIN 
    #FeeCondition C ON C.FeeRuleID = B.FeeRuleID

DROP TABLE #FeeRule
DROP TABLE #FeeCondition
DROP TABLE #Accounts

0 个答案:

没有答案