Ошибка SQL: в списке выбора можно указать только одно выражение? - PullRequest
0 голосов
/ 30 ноября 2011

Я получаю эту ошибку (см. Заголовок). Как я могу исправить это:

SQL

use adventureworks
go

select si.CustomerID,
'myField' =
            CASE
                 When (Select Top 1 FirstName,LastName  From Person.Contact pc Where si.ContactID = pc.contactid ) is not null Then 
            Cast((Select Top 1 FirstName,LastName  From Person.Contact pc Where si.ContactID = pc.contactid  ) As varchar)
            Else ''
            END
from Sales.Individual si
where si.CustomerID=11000

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

Изменить запрос

use adventureworks go  

select si.CustomerID, 'myField' =             
      CASE    When 
          (Select Top 1 FirstName From Person.Contact pc Where si.ContactID = pc.contactid ) is not null 
              Then              
          Cast((Select Top 1 FirstName
                   From Person.Contact pc Where si.ContactID = pc.contactid  ) As varchar)             
              Else ''             
     END from Sales.Individual si where si.CustomerID=11000 

Ошибка вызвана тем, что вы выбираете FirstName и LastName, чтобы удалить ошибку, выберите один из них: firstanme или lastname или объедините оба в одном

например

Select Top 1 FirstName+ ' ' + LastName as fullName
                       From Person.Contact pc Where si.ContactID = pc.

это решит вашу проблему

для дополнительной проверки: В списке выбора можно указать только одно выражение, если подзапрос не введен с EXISTS.

1 голос
/ 30 ноября 2011

Когда вы используете подобный запрос в своем запросе, SQL может вернуть только одно поле из одной записи. Вы, вероятно, хотели объединить эти поля, что вы можете сделать так:

use adventureworks
go

select si.CustomerID,
'myField' =
            CASE
                 When (Select Top 1 FirstName+ ' ' + LastName  From Person.Contact pc Where si.ContactID = pc.contactid ) is not null Then 
            Cast((Select Top 1 FirstName+ ' ' + LastName  From Person.Contact pc Where si.ContactID = pc.contactid  ) As varchar)
            Else ''
            END
from Sales.Individual si
where si.CustomerID=11000

Или вы можете просто выбрать одно из этих полей в подзапросах.

1 голос
/ 30 ноября 2011

Вы пытаетесь выбрать два значения и рассматривать их как одно выражение:

select top 1 FirstName, LastName ...

Вероятно, это должно быть изменено на что-то вроде этого:

select top 1 FirstName + ' ' + LastName ...
<Ч />

Полностью функционирующая версия будет выглядеть примерно так:

select
    si.CustomerID,
    CASE
       WHEN
           (Select Top 1 FirstName + ' ' + LastName  From Person.Contact pc Where si.ContactID = pc.contactid ) is not null
       THEN
           (Select Top 1 FirstName + ' ' + LastName  From Person.Contact pc Where si.ContactID = pc.contactid  )
        Else ''
    END [myField]
from
    Sales.Individual si
where
    si.CustomerID=11000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...