Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式_Sql_Sql Server_Tsql - Fatal编程技术网

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;