【发布时间】:2016-06-20 17:04:42
【问题描述】:
我收到以下错误消息;
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
我遇到问题的代码部分位于我的 select 语句中;
,(SELECT COUNT(sch.startdate)
FROM #test AS sch
WHERE L.Id = sch.id
GROUP BY sch.id, sch.startdate
HAVING sch.startdate >= L.T_Start AND sch.startdate <= @END) AS SC
目前,如果该人在测试临时表中只有一条记录,但如果有两条记录就会崩溃。我知道我可以使用 Top 1 来限制它,但这不是我想要的。 L 来自主 select 语句。
好的,所以临时表有以下数据:
ID startdate
1 2014-10-02
1 2014-11-02
2 2014-11-02
使用我的代码中的 TOP 1,我得到以下结果:
ID ~Other Stuff~ SC
1 ~~~~~~~~~~~~~ 1
2 ~~~~~~~~~~~~~ 1
但我想要返回的是:
ID ~Other Stuff~ SC
1 ~~~~~~~~~~~~~ 2
2 ~~~~~~~~~~~~~ 1
如何修改我的代码来实现这一点?
谢谢。
【问题讨论】:
-
为了得到一个好的答案,您仍然需要显示“主”
from子句,而不仅仅是子查询。从概念上讲,您希望摆脱子查询中的group by并使用 towhere子句实质上通过where sch.id = main.id行将其连接到主查询。
标签: sql-server sql-server-2008 tsql