带有自定义变量的条件GROUP BY

时间:2015-11-04 12:28:23

标签: sql tsql 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是存储过程的一部分,但我认为不应该有任何区别

4 个答案:

答案 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.NameSELECT(没有聚合功能)。您可以使用表达式。

答案 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