一尘不染

SQL:基于CASE表达式添加新列并从另一个表中查找值

sql

我试图将一个名为Multiplier的新列添加到一个称为Trades的现有表中。该列的行值将取决于“交易”表上称为“类型”的另一列。如果Type是“
Equity”,“ Corp”或“Option”以外的任何其他值,则需要从另一个名为ContractSize的表中查找该值。最后,我希望“乘数”列的数据类型为十进制(7,3 ),我的代码是:

ALTER TABLE Portfolio.Trades
ADD Multiplier decimal(7,3) AS
(
CASE 
 WHEN Type = 'Equity' Then 1
 WHEN Type = 'Corp' Then 0.1
 WHEN Type = 'Option' Then 100
ELSE
 (SELECT ContractSize FROM Portfolio.ContractSize CS
 JOIN Portfolio.Trades T
 ON T.Identifier = CS.ContractSize)
)

我在此代码上收到两个错误:

消息156,级别15,状态1,第2行关键字“ AS”附近的语法错误。
消息102,级别15,状态1,第12行’)’附近的语法不正确。

一些指导是非常感谢。


阅读 166

收藏
2021-05-16

共1个答案

一尘不染

分两步执行此操作:

ALTER TABLE Portfolio.Trades ADD Multiplier decimal(7,3);

UPDATE T
    SET Multiplier = (CASE WHEN T.Type = 'Equity' Then 1
                           WHEN T.Type = 'Corp' Then 0.1
                           WHEN T.Type = 'Option' Then 100
                           ELSE (SELECT CS.ContractSize
                                 FROM Portfolio.ContractSize CS
                                 WHERE T.Identifier = CS.ContractSize)
                       END)
    FROM Portfolio.Trades T;

我猜想ON/ correlation条件不正确。如果正确,则可以执行以下操作:

UPDATE T
    SET Multiplier = (CASE WHEN T.Type = 'Equity' Then 1
                           WHEN T.Type = 'Corp' Then 0.1
                           WHEN T.Type = 'Option' Then 100
                           ELSE T.Identifier)
                       END)
    FROM Portfolio.Trades T;

甚至只是将其添加为计算列。

2021-05-16