Только одно выражение может быть указано в списке выбора, если подзапрос не введен с EXISTS - PullRequest
0 голосов
/ 04 августа 2011

У меня есть SQL query, который выбирает некоторые значения (и работает через таблицы в форме объединения).Одно из полей возвращает 0 или 1, но я хочу вернуть что-то еще в случае 0 или 1 (да / нет).

Код:

SELECT Passed, 
       CASE Passed
            WHEN '1' THEN 'Yes'
            ELSE 'No'
       END
FROM EXAM_INSTANCE

Работает на отлично.

Но когда я интегрирую это как подзапрос в сохраненный процесс, я получаю ошибку:

Only one expression can be specified in the select list when the sub-query is not introduced with 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 Я изменил имена таблиц по соображениям конфиденциальности, поэтому не беспокойтесь, если они не совпадают.

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

Ожидается, что подзапрос в этой позиции будет возвращать не более одного значения (т.е. один столбец в одной строке), но ваш подзапрос возвращает два столбца (один - Passed, другой - безымянный столбец, представленный выражением CASE ) и я не могу знать, сколько строк.

Вы должны либо интегрировать результаты подзапроса в ваш основной запрос (что-то вроде того, что предлагает @Alex_L), либо ограничить вывод подзапроса ожидаемым количеством значений.

1 голос
/ 04 августа 2011
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 
0 голосов
/ 01 апреля 2013
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...