【发布时间】:2015-01-08 07:33:33
【问题描述】:
我正在尝试使用从另一个表 (incomestatement) 中提取的信息更新表 (Yahoostockdata)),具体取决于日期。
Yahoostockdata 包含雅虎每天的价格,我想根据incomestatement 中针对该特定日期的最实际可用信息添加每个日期的股票数量。
运行查询时(没有更新),我得到了我想要的所有数字。除了,添加UPDATE 语句时,我收到错误消息:suquery 返回超过 1 个值。
消息 512,第 16 级,状态 1,第 1 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。声明已终止。
谁能帮我解决这个问题?我已经看过相关的问题,但找不到答案。先感谢您。在我正在使用的代码下方:
Update YahooStockData
Set NumberOfShares = (Select [Weighted average shares outstanding (Diluted)]
from (Select *,ROW_NUMBER() over (partition by derived_1.MorningstarTicker,
derived_1.[date] order by derived_1.AsOfDate desc) as RN
from (Select Yahoostockdata.YahooTicker, IncomeStatement.MorningstarTicker,
yahoostockdata.[Date], AsOfDate,
Incomestatement.[Weighted average shares outstanding (Diluted)]
from IncomeStatement INNER JOIN
YahooStockData ON IncomeStatement.MorningstarTicker = YahooStockData.MorningstarTicker
Where YahooStockData.[Date] >= AsOfDate) as derived_1) as derived_2
Where RN = 1)
【问题讨论】:
-
您对“子查询返回超过 1 个值”有什么不明白的地方吗?子查询返回多行。您可以通过在
select中使用top 1或使用诸如min()或max()之类的聚合函数来天真地解决此问题。但是,您可能希望对实际选择的值进行一些控制。 -
戈登,感谢您的快速回复。 Top 1 等确实不能解决它。基本上,该查询为我提供了应粘贴到 yahoostockdata 表中的所有行的精确副本。如果我能解决这个问题,我将不胜感激。
标签: sql sql-server tsql