SQL Использование CASE с критериями, хранящимися как значения в другой таблице - PullRequest
0 голосов
/ 25 мая 2018

Я надеюсь, что я упускаю из виду что-то очень простое с моей проблемой.У меня есть запрос на расчет комиссионных, который мне нужно написать, для расчета используются правила во многих таблицах.Одна из таблиц определяет условия, при которых будет взиматься определенная плата.Я надеялся избежать динамического SQL, но, если это потребуется, обратите внимание, что у меня есть несколько CTE, которые используются в основной процедуре.

Я упростил хранимую процедуру до следующего, что хорошо иллюстрирует проблему.Мне нужно, чтобы содержимое [Formula] применялось как логическое выражение в операторе case, но я продолжаю получать ошибку:

Выражение не-логического типа, указанное в контексте, гдеожидается условие, близкое к 'THEN'

Если вы замените поле Formula фактическим содержимым, оно будет работать так, как вам нужно.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...