2015-10-13 1 views
1

Я проверил столько вопросов, сколько мог, но просто не могу найти ответ для ПОЧЕМУ это происходит.«Подзапрос SQL Server возвратил более 1 значения» при использовании MAX() в подзапросе

У меня есть запрос:

SELECT * 
FROM TableA 
WHERE Col1 = 
(
    SELECT MAX(TBC1) 
    FROM TableB 
    GROUP BY TBC2 
) 

который бросает ошибку Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. но при изменении оператора = к IN тогда счастливо проходит. Я также отмечаю, что использование TOP(1) в дополнительном запросе также решит проблему.

Из-за логики, похоже, что список строк, возвращаемых до того, как найден MAX, вызывает ошибку в SQL, хотя MAX вернет только 1 строку?

Я просто пытаюсь понять рассуждения и как лучше всего построить такой запрос.

+0

Вы используете группу по подзапросу. поэтому он возвращает более одного значения. Удалите группу и проверьте результаты. – balaraman

ответ

1

Я думаю, что это, как ожидается,

Вы группирование по ТЬС2. в этом случае Max (tb1) вернет максимальное значение для каждого отдельного значения в tbc2.

Предположим, что tbc1 является employeeid, tbc2 as dept. Если есть 100 записей, но содержит TBc2, имеющее три типа значений, таких как dept1, dept2, dept3, тогда запрос выше вернет 3 значения.

+0

Мальчик, я чувствую себя как n00b прямо сейчас. Я не принимал во внимание, что «группа by» технически приводила к нескольким строкам, хотя я отфильтровывал результаты до одной строки с помощью предложения 'where' – Storm

0

Цель group by - включить агрегацию по определенным группам. Ваш group by вызывает возврат отдельного max (совокупность) для каждого отдельного значения TCB2.

Возможно, вы добавили, что group by не понимает, что он делает. Возможно, если вы скажете нам, что вы делаете , попробовав, мы можем показать вам, как это сделать правильно.

1

У вас есть группа. Этот запрос будет возвращать одну строку на отдельное значение TBC2. Удалите группу.

Смежные вопросы