SQL:基于CASE表达式添加新列并从另一个表中查找值 [英] SQL: Add a new column based on CASE expression and looking up values from another table

查看:105
本文介绍了SQL:基于CASE表达式添加新列并从另一个表中查找值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  ALTER TABLE Portfolio.Trades 
加乘数小数(7,3)AS

情况
当类型='股票'时1
当类型='公司'然后0.1
当类型='期权'然后100
ELSE
(从Portfolio.ContractSize CS
JOIN Portfolio.Trades T
T.Identifier = CS.ContractSize中选择ContractSize)

此代码出现两个错误:



Msg 156,Level 15,State 1,第2行
关键字 AS附近的语法不正确。

消息102,级别15,状态1,第12行
'附近的语法不正确。


解决方案

分两个步骤执行此操作: b p>

 更改TA BLE Portfolio.Trades ADD乘数十进制(7,3); 

更新T
SET乘数=(当T.Type ='Equity'时为例,然后1
T.Type ='Corp'时则为0.1
T.类型='选项'然后100
ELSE(选择CS.ContractSize
FROM Portfolio.ContractSize CS
WHERE T.Identifier = CS.ContractSize)
END)
FROM Portfolio.Trades T;

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

  UPDATE T 
SET Multiplier =(以T.Type为例'Equity'然后1
T.Type ='Corp'然后0.1
WHEN T.Type ='Option'然后100
ELSE T.Identifier)
END)
来自投资组合。

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


I am trying to add a new column called Multiplier to an existing table called Trades. The row values of this column will depend on another column on the Trades table called Type. If the Type is anything other than "Equity", "Corp" or "Option, then the value needs to be looked up from another table called ContractSize. Lastly, I want the data type of the Multiplier column to be decimal (7,3). The code I had was:

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)
)

I am getting two errors on this code:

Msg 156, Level 15, State 1, Line 2 Incorrect syntax near the keyword 'AS'.
Msg 102, Level 15, State 1, Line 12 Incorrect syntax near ')'.

Some guidance is much appreciated.

解决方案

Do this in two steps:

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;

I am guessing that the ON/correlation condition is incorrect. If it is correct, you can just do:

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;

Or even just add this as a computed column.

这篇关于SQL:基于CASE表达式添加新列并从另一个表中查找值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆