SQL: 添加一个基于 CASE 表达式的新列并从另一个 table 中查找值
SQL: Add a new column based on CASE expression and looking up values from another table
我正在尝试将一个名为 Multiplier 的新列添加到一个名为 Trades 的现有 table 中。此列的行值将取决于交易 table 上称为类型的另一列。如果类型不是 "Equity"、"Corp" 或“选项”,则需要从另一个名为 ContractSize 的 table 中查找该值。最后,我想要乘数的数据类型列为十进制 (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 行
')' 附近的语法不正确。
非常感谢一些指导。
分两步完成:
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
/相关条件不正确。如果正确,你可以这样做:
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;
或者甚至只是将其添加为计算列。
每个 CASE 语句都必须在条件末尾有一个 END 关键字。在这种情况下应该是这样的。
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)END
)
为什么要向 table 添加列?您也可以创建一个视图。
CREATE VIEW myView AS
SELECT *, -- your real column list here
CAST(CASE
WHEN Type = 'Equity' Then 1
WHEN Type = 'Corp' Then 0.1
WHEN Type = 'Option' Then 100
ELSE
(SELECT ContractSize
FROM Portfolio.ContractSize CS
WHERE T.Identifier = CS.ContractSize)
END AS decimal(7,3)) AS Multiplier
FROM
Portfolio.Trades T;
我正在尝试将一个名为 Multiplier 的新列添加到一个名为 Trades 的现有 table 中。此列的行值将取决于交易 table 上称为类型的另一列。如果类型不是 "Equity"、"Corp" 或“选项”,则需要从另一个名为 ContractSize 的 table 中查找该值。最后,我想要乘数的数据类型列为十进制 (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 行
')' 附近的语法不正确。
非常感谢一些指导。
分两步完成:
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
/相关条件不正确。如果正确,你可以这样做:
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;
或者甚至只是将其添加为计算列。
每个 CASE 语句都必须在条件末尾有一个 END 关键字。在这种情况下应该是这样的。
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)END
)
为什么要向 table 添加列?您也可以创建一个视图。
CREATE VIEW myView AS
SELECT *, -- your real column list here
CAST(CASE
WHEN Type = 'Equity' Then 1
WHEN Type = 'Corp' Then 0.1
WHEN Type = 'Option' Then 100
ELSE
(SELECT ContractSize
FROM Portfolio.ContractSize CS
WHERE T.Identifier = CS.ContractSize)
END AS decimal(7,3)) AS Multiplier
FROM
Portfolio.Trades T;