2016-09-28 2 views
2

Как это, что это справедливо:Определение группы: из параметра -

ALTER PROCEDURE [StoredProcedure] 

@abcID int = null -- optional param 

SELECT columnJ, columnK, Count(eID) AS Num, Sum(OutXYZ) as TotalProdXYZ, Sum(RawXYZ) as TotalRawXYZ 
FROM [v_ViewTable] 
WHERE (@abcID IS NULL OR (abcID = @abcID)) 

GROUP BY columnJ, columnK 

Но это бросает «columnJ недопустим в списке выбора, поскольку он не содержится ни в статистической функции или GROUP BY ".

ALTER PROCEDURE [StoredProcedure] 

@abcID int = null -- optional param 

-- if 0: Group by columnJ, columnK 
-- else: Group by columnK, columnJ 
, @Grouping int = null 

SELECT columnJ, columnK, Count(eID) AS Num, Sum(OutXYZ) as TotalProdXYZ, Sum(RawXYZ) as TotalRawXYZ 
FROM [v_ViewTable] 
WHERE (@abcID IS NULL OR (abcID = @abcID)) 

GROUP BY 
CASE WHEN @Grouping = 0 THEN columnJ ELSE columnK END 
,CASE WHEN @Grouping = 0 THEN columnK ELSE columnJ END 

Что случилось с моим заявлением CASE? В принципе, если @Grouping = 0, я хочу, чтобы группа была J, K, если что-то еще, это должно быть K, J

Заранее благодарим за любую помощь!

+0

... Я забыл поставить «КАК НАЧАТЬ» в моем примере, но это в моем реальном коде в сервере SQL ... – blacksaibot

+0

вы получите ошибка при передаче в NULL или при прохождении чего-либо? – scsimon

ответ

1

Как говорится в сообщении, columnJ и columnK не содержатся ни в агрегатной функции, ни в предложении GROUP BY во втором случае. Вы должны использовать поле или точное выражение в списке выбора AS IS в разделе GROUP BY.

Так следующее утверждение будет в порядке:

SELECT CASE WHEN @Grouping = 0 THEN columnJ ELSE columnK END, 
     CASE WHEN @Grouping = 0 THEN columnK ELSE columnJ END, 
     Count(eID) AS Num, Sum(OutXYZ) as TotalProdXYZ, Sum(RawXYZ) as TotalRawXYZ 
FROM [v_ViewTable] 
WHERE (@abcID IS NULL OR (abcID = @abcID)) 

GROUP BY 
CASE WHEN @Grouping = 0 THEN columnJ ELSE columnK END 
,CASE WHEN @Grouping = 0 THEN columnK ELSE columnJ END 
Смежные вопросы