子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的

flashasp 2006-06-14 09:35:29
SELECT top 20 字段A,字段B, 当前价格,
CASE WHEN 当前价格 - 上次价格 > 0 THEN '' WHEN 当前价格 - 上次价格 < 0 THEN '' ELSE '' END AS 趋势, ISNULL(当前价格 - 上次价格, 0) AS 浮动价格, 日期 FROM (SELECT districtname AS 字段A,districtid AS 字段B, (SELECT oldaveprice FROM TEST_DATA WHERE districtname = A.districtname AND OldPriceDate = MAX(A.OldPriceDate )) AS 当前价格, (SELECT oldaveprice FROM TEST_DATA WHERE OldPriceDate = (SELECT MAX(OldPriceDate) FROM TEST_DATA WHERE districtname = A.districtname AND OldPriceDate < MAX(A.OldPriceDate ))) AS 上次价格, MAX(OldPriceDate) AS 日期 FROM TEST_DATA AS A GROUP BY districtname,districtid) AS MID order by 浮动价格 desc

Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
[Microsoft][ODBC SQL Server Driver]

[SQL Server]子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

请问这是什么错误
...全文
1083 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
areswang 2006-06-14
  • 打赏
  • 举报
回复
mark!

  • 打赏
  • 举报
回复
如果子查询里面的东西是不一样的,那么你需要考虑修改自己的语句,如果是不可能的,你可以使用top 1
playwarcraft 2006-06-14
  • 打赏
  • 举报
回复
WHERE OldPriceDate = (SELECT MAX(OldPriceDate) FROM TEST_DATA WHERE districtname = A.districtname AND OldPriceDate < MAX(A.OldPriceDate ))) AS 上次价格, MAX(OldPriceDate) AS 日期 FROM TEST_DATA AS A GROUP BY districtname,districtid)

应该可能是这句有问题,
你select max(xx) 反回的值不止1个就会有这种错误.
用类似 A in (select …) 的子查询会不会好点?
试试看吧
flashasp 2006-06-14
  • 打赏
  • 举报
回复

SELECT top 20 字段A,字段B, 当前价格,
CASE WHEN (当前价格-上次价格)> 0 THEN '01'
WHEN (当前价格-上次价格)< 0 THEN '02'
ELSE '03' END AS 趋势,
ISNULL(当前价格 - 上次价格, 0) AS 浮动价格,日期
FROM (SELECT districtname AS 字段A,districtid AS 字段B,
(SELECT oldaveprice FROM TEST_DATA WHERE districtname = A.districtname AND OldPriceDate = MAX(A.OldPriceDate )) AS 当前价格,
(SELECT oldaveprice FROM TEST_DATA WHERE OldPriceDate = (SELECT MAX(OldPriceDate) FROM TEST_DATA WHERE districtname = A.districtname AND OldPriceDate < MAX(A.OldPriceDate ))) AS 上次价格,
MAX(OldPriceDate) AS 日期
FROM TEST_DATA AS A GROUP BY districtname,districtid) AS MID order by 浮动价格 desc

还是一样的错误
laoliu666 2006-06-14
  • 打赏
  • 举报
回复
MAX(OldPriceDate) AS 日期
itblog 2006-06-14
  • 打赏
  • 举报
回复
SELECT top 20 字段A,字段B, 当前价格,
CASE WHEN (当前价格-上次价格)> 0 THEN ''
WHEN (当前价格-上次价格)< 0 THEN ''
ELSE '' END AS 趋势,
ISNULL(当前价格 - 上次价格, 0) AS 浮动价格,日期
FROM (SELECT districtname AS 字段A,districtid AS 字段B,
(SELECT oldaveprice FROM TEST_DATA WHERE districtname = A.districtname AND OldPriceDate = MAX(A.OldPriceDate )) AS 当前价格,
(SELECT oldaveprice FROM TEST_DATA WHERE OldPriceDate = (SELECT MAX(OldPriceDate) FROM TEST_DATA WHERE districtname = A.districtname AND OldPriceDate < MAX(A.OldPriceDate ))) AS 上次价格,
MAX(OldPriceDate) AS 日期
FROM TEST_DATA AS A GROUP BY districtname,districtid) AS MID order by 浮动价格 desc

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧