确定分组依据 -

问题描述:

它是如何,这是有效的:确定分组依据 -

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

...我忘了把“AS BEGIN”在我的例子,但它在我的实际代码在SQL服务器... – blacksaibot

+0

你明白了当你传递NULL或传递任何东西时出错? – scsimon

由于消息说columnJcolumnK未包含在聚合函数或第二种情况下的GROUP BY子句中。您应该在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