sothvannak Ответов: 2

Подзапрос вернул более 1 значения. Это не допускается, когда подзапрос следует за=,! =, <, <=, >, >= или когда подзапрос используется в качестве выражения.


Пожалуйста, помогите мне дать хоть какое-то представление об этом.

Что я уже пробовал:

declare @code nvarchar(13)
set @code= (select gendertype from cif)
if @code='001'
	begin
		set @code='Male'
	end
else if @code='002'
	begin
		set @code='Female'
	end
else if @code = '000'
	begin
		set @code='Other'
	end
select cid,name1,@code as gender from cif

2 Ответов

Рейтинг:
2

F-ES Sitecore

select gendertype from cif


Этот оператор возвращает более одной строки, и если он возвращает более одной строки, то какое значение будет иметь @code? Первое значение? Последнее значение? Случайная величина? Если вы хотите установить переменную в поле, то вы должны установить ее в одно поле.

Мы не можем сказать вам, что это за решение, так как мы не знаем ваших данных или бизнес-требований, возможно, у вас плохие данные в cif, возможно, вам нужно использовать "distinct" или "group by" при выборе из cif, мы не можем знать. Хотя похоже, что вместо этого вам действительно может понадобиться оператор CASE

CASE (Transact-SQL)[^]

выберите уголовного розыска, имя, случай, когда gendertype ... конец как пол от cif


Рейтинг:
2

OriginalGriff

Операция Select возвращает все строки, которые удовлетворяют критериям, как правило, обеспечивается, где выражение. Но вы пытаетесь присвоить результаты запроса SELECT одной переменной NVARCHAR - поэтому, если запрос возвращает две строки, какое значение должен использовать SQL? Система не знает, поэтому вместо этого она выдает исключение.
Вероятно, то, что вы пытаетесь сделать, это добавить условие WHERE:

declare @code nvarchar(13)
set @code= (select gendertype from cif WHERE somecolumn = somevalue)

Или даже
declare @code nvarchar(13)
set @code= (select TOP 1 gendertype from cif WHERE somecolumn = somevalue)

Но на практике это плохая идея. Вместо этого создайте вторую таблицу: гендерные типы
ID               Desc
(INT, IDENTITY)  NVARCHAR(6)
1                Male
2                Female
3                OTHER
И изменить свой gendertype столбец к INT, чтобы соответствовать, ссылаясь на гендерные типы.Идентификатор качестве иностранного ключа.
Затем ваш запрос становится простым соединением:
SELECT c.cid,c.name1,g.Desc AS gender FROM cif c
JOIN GenderTypes g ON g.ID = c.gendertype
И система сделает всю работу за вас.