Sql 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式
我有一个Sql 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个SQL查询,它选择一些值(并以联接的形式跨表工作)。其中一个字段返回0或1,但我想在0或1的情况下返回其他内容(是/否) 守则: SELECT Passed, CASE Passed WHEN '1' THEN 'Yes' ELSE 'No' END FROM EXAM_INSTANCE 效果非常好 但是,当我将其作为子查询集成到存储过程中时,我得到了错误: 当子查询未引入EXISTS时,只能在选择列表中指定
SQL查询
,它选择一些值(并以联接的形式跨表工作)。其中一个字段返回0或1,但我想在0或1的情况下返回其他内容(是/否)
守则:
SELECT Passed,
CASE Passed
WHEN '1' THEN 'Yes'
ELSE 'No'
END
FROM EXAM_INSTANCE
效果非常好
但是,当我将其作为子查询集成到存储过程中时,我得到了错误:
当子查询未引入EXISTS时,只能在选择列表中指定一个表达式。
原始查询是:
select Firstname, Lastname, ei.Started,
((ei.totalcorrect*100)/@examQuestionCount) as percentage, passed, ei.InstanceID
from ea ei, INVITE i, OSTTable ost, f f
where ei.Finished is not null
and ei.InviteID = i.InviteID
我正在努力:
select Firstname, Lastname, ei.Started,
((ei.totalcorrect*100)/@examQuestionCount) as percentage,
(SELECT Passed,
CASE Passed
WHEN '1' THEN 'Yes'
ELSE 'No'
END
FROM EA),
ei.InstanceID
from EA E ei, INVITE i, osttable ost, ef e
where ei.Finished is not null
and ei.InviteID = i.InviteID
我犯错误的原因是什么
PS由于隐私原因,我已更改了表名,因此如果它们不匹配,请不要担心。处于该位置的子查询将返回不超过一个值(即一行中的一列),但您的子查询将返回两列(一列是
传递的
,另一列是由CASE表达式表示的未命名列)我不知道有多少行
select Firstname, Lastname, ei.Started,
((ei.totalcorrect*100)/@examQuestionCount) as percentage,
passed_ = CASE Passed
WHEN '1' THEN 'Yes'
ELSE 'No'
END,
ei.InstanceID
from EA E ei, INVITE i, osttable ost, ef e
where ei.Finished is not null
and ei.InviteID = i.InviteID
您应该将子查询的结果集成到主查询中(类似于@Alex_L所建议的内容),或者将子查询的输出限制为预期的值量。处于该位置的子查询预期返回的值不超过一个(即一行中的一列),但是您的子查询返回两列(一列是
传递的
,另一列是由CASE表达式表示的未命名列),我不知道有多少行
USE [IAS_AccountDB]
GO
/* Object: StoredProcedure [dbo].[Prc_Accounts_LastNodes] Script Date: 04/01/2013 01:29:20 */
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Prc_Accounts_LastNodes]
(
@AccountParentID int = NULL
)
AS
SELECT
[Accounts].[AccountName]
,[Accounts].[AccountID]
FROM
[Accounts]
WHERE
@AccountParentID IN
(
SELECT
[Accounts].[AccountID]
,[Accounts].[AccountName]
,[Accounts].[AccountStandardCode]
FROM
[Accounts]
WHERE
NOT EXISTS
(
SELECT TOP 1
1
FROM
[Accounts_ParentIDs]
WHERE
[Accounts_ParentIDs].[AccountParentID] = [Accounts].[AccountID]
)
)
RETURN 0;
您应该将子查询的结果集成到主查询中(类似于@Alex_L所建议的内容),或者将子查询的输出限制在预期的值数量内。这里有大量交叉连接。即使子查询的事情已经解决了,这是否也能起作用?这里有大量的交叉连接。即使子查询的问题已经解决了,这个方法也有效吗?只有代码或SQL的答案很少是一个好答案。你也应该考虑在你的答案中加上一些解释性的文本。一个代码或SQL的答案很少是一个好的答案。你也应该考虑在你的答案中加上一些解释性的文本。
USE [IAS_AccountDB]
GO
/* Object: StoredProcedure [dbo].[Prc_Accounts_LastNodes] Script Date: 04/01/2013 01:29:20 */
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Prc_Accounts_LastNodes]
(
@AccountParentID int = NULL
)
AS
SELECT
[Accounts].[AccountName]
,[Accounts].[AccountID]
FROM
[Accounts]
WHERE
@AccountParentID IN
(
SELECT
[Accounts].[AccountID]
,[Accounts].[AccountName]
,[Accounts].[AccountStandardCode]
FROM
[Accounts]
WHERE
NOT EXISTS
(
SELECT TOP 1
1
FROM
[Accounts_ParentIDs]
WHERE
[Accounts_ParentIDs].[AccountParentID] = [Accounts].[AccountID]
)
)
RETURN 0;