我想在我的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是存储过程的一部分,但我认为不应该有任何区别
答案 0 :(得分: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
(没有聚合功能)。您可以使用表达式。
答案 1 :(得分:0)
声明@GroupByFirst varchar(30)=' s'
从Login_Master中选择max(someval) 通过...分组 @GroupByFirst不为null然后a.Name else b.Name end
的情况答案 2 :(得分:0)
在SELECT语句中添加@GroupByFirst case语句以避免此问题。 SELECT语句应包含GROUP BY子句中使用的列/变量/语句。
答案 3 :(得分: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