我试图使用合并,但显然是误解了一些东西。在下面的代码中,第一个之后的代码(包括paren) - 直到'= en.personID)st)'给出了预期的不同stateID的列表。但是当我运行整个代码时,我收到一个错误:关键字'where'附近的Incorect语法。谁能看到我做错了什么?你能在coalesce中使用select / subquery吗?谢谢!
select c.endYear
,coalesce(s.stateID, select st.stateID
from (select distinct st.stateID
from (select st.stateID
,st.personID
from student st
left join enrollment en on st.personID = en.personID) st)
where s.personID = st.personID)
, s.lastname
, s.firstname . . . .
答案 0 :(得分:1)
子查询需要用括号括起来。可能还有其他问题。这个版本应解析:
select . . .
coalesce(s.stateID,
(select distinct st.stateID
from student st left join
enrollment en
on st.personID = en.personID
where s.personID = st.personID
)),
如果子查询返回多行,这可能仍会生成运行时错误。然后你必须选择哪个州。一般方法是使用聚合函数:
select . . .
coalesce(s.stateID,
(select max(st.stateID)
from student st left join
enrollment en
on st.personID = en.personID
where s.personID = st.personID
)),
或者,您可以使用fetch first 1 row only
,top
,limit
或类似内容拉一行。