2015-11-04 2 views
0

Я хочу использовать переменную для определения условной GROUP BY в моей SQL заявление так:Условный GROUP BY с пользовательской переменной

group by 
case when (@GroupByFirst is not null) then a.Name else b.Name end 

К сожалению, я получаю сообщение об ошибке, что a.Name является

invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause 

Есть ли какое-либо решение, чтобы заставить его работать. Забыл упомянуть, SQL является частью хранимой процедуры, но это не имеет никакого значения, я считаю

+2

Вы можете показать свое заявление? – Jeremy

+1

Каков весь запрос? –

+0

Запрос довольно долго, но это пример дает ту же ошибку: объявить @GroupByFirst INT = 1 выберите sa.Name, счетчик (p.Id) из свойств р внутреннее соединение PropertyInfo pinfo на pinfo.Id = p.LiveInfoId внутреннее соединение SolicitorAccount sa on pinfo.SolicitorAccountId = sa.Id группа случай когда (@GroupByFirst не является нулевым), то sa.Name else sa.Name end – Bartosz

ответ

0

Ваш запрос должен выглядеть следующим образом:

select (case when (@GroupByFirst is not null) then a.Name else b.Name end) as name 
from . . . 
group by (case when (@GroupByFirst is not null) then a.Name else b.Name end) 

Вы не можете обратиться к любому a.Name ни b.Name в SELECT (без функции агрегации, то есть). Вы можете использовать выражение.

+0

Вот и все, спасибо большое! – Bartosz

0

объявляют @GroupByFirst VARCHAR

выбрать максимум (someval) от Login_Master группы по случае, когда @GroupByFirst не равно нулю, то a.name остальное b.Name конец (30) = 'S'

0

Добавьте аргумент case @GroupByFirst в инструкцию SELECT, чтобы избежать проблемы. Оператор SELECT должен содержать оператор column/variable /, который используется в GROUP BY Clause.

0

вы можете выполнить сравнение в подзапросе и затем группировать значения.

SELECT subQuery.Name 
FROM 
    (SELECT (CASE WHEN (@GroupByFirst IS NOT NULL) THEN a.Name ELSE b.Name END) AS name 
    FROM . . .) AS subQuery 
GROUP BY subQuery.Name 
Смежные вопросы