如何解决使用具有多个条件的DELETE FROM子句和来自另一个表的数据
我有两个桌子。一个是具有价格变动的表,另一个是具有价格变动和调整后的收益的表。
我想基于退货表中的数据从价格变动表中删除数据。
价格变动表如下:
SecurityID TradeDate OneDayReturn
3774978 8/20/2020 -0.0013
3775071 8/20/2020 -0.0034
3775156 8/20/2020 -0.027
3776090 8/20/2020 -0.0012
返回表如下:
SecurityID TradeDate OneDayReturn TodaysIndexSecurityId IndexReturn TodaysBeta AdjReturn
3774978 8/20/2020 -0.0013 21814 0.0033 0.246153161 0.000812305
3775071 8/20/2020 -0.0034 14278 NULL 0.952705801 NULL
3775156 8/20/2020 -0.027 21814 0.0033 1.57887578 0.00521029
3776090 8/20/2020 -0.0012 6859 NULL 1.478636146 NULL
我想从价格变动中删除ABS(AdjReturn * 2)大于ABS(OnedayReturn)的行,但是如果OneDayReturn和IndexReturn之间有符号翻转,请保留该行。因此,我的意思是仅在OneDayReturn * IndexReturn为正数时删除它。
我尝试过:
DELETE FROM #PriceMovements
WHERE (ISNULL( ABS( SELECT AdjReturn * 2 FROM #AdjReturnTable ),0 ) >
ABS(OneDayReturn) AND ISNULL(OneDayReturn,0) * ISNULL(IndexReturn,0) > 0);
我遇到以下错误:
第15层状态1线129的消息
关键字附近的语法不正确 'SELECT'。
消息102,第15级,状态1,第129行
语法不正确 ')'。
我认为这意味着我使用了不正确的AND或无法在此语句中引用其他表...但这是为什么?
解决方法
您可以将EXISTS
与SecurityID
一起用作常见的匹配列:
DELETE p
FROM #PriceMovements p
WHERE EXISTS ( SELECT 0
FROM #AdjReturnTable
WHERE ISNULL(ABS (AdjReturn * 2),0) > ABS(OneDayReturn)
AND ISNULL(OneDayReturn,0) * ISNULL(IndexReturn,0) > 0
AND SecurityID = p.SecurityID );
对于您而言,SELECT语句嵌套在函数中的位置错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。