Sql 带有自定义变量的条件分组依据

Sql 带有自定义变量的条件分组依据,sql,tsql,group-by,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语句中使用一个变量来确定条件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是存储过程的一部分,但它不会有任何区别,我相信您的查询应该如下所示:

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) 

您不能在
SELECT
中引用
a.Name
b.Name
(即没有聚合功能)。您可以使用表达式。

声明@GroupByFirst varchar(30)='s'

从登录\u主机中选择最大值(someval) 分组
当@GroupByFirst不为空时,则为a.Name else b.Name end

在SELECT语句中添加@GroupByFirst case语句以避免该问题。SELECT语句应包含GROUPBY子句中使用的列/变量/语句

您可以在子查询中进行比较,然后对值进行分组

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

你能展示你的整个语句吗?整个查询是什么?这个查询很长,但这是一个给出相同错误的示例:declare@GroupByFirst int=1从属性p internal join PropertyInfo pinfo on pinfo.Id=p.LiveInfoId internal join clausoraccount pinfo.clausoraccount=sa.Id按大小写分组(@GroupByFirst不为空)然后是sa.Name else sa.Name end