确定分组依据 -
问题描述:
它是如何,这是有效的:确定分组依据 -
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
提前任何帮助谢谢!
答
由于消息说columnJ
和columnK
未包含在聚合函数或第二种情况下的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
...我忘了把“AS BEGIN”在我的例子,但它在我的实际代码在SQL服务器... – blacksaibot
你明白了当你传递NULL或传递任何东西时出错? – scsimon