2015-11-04 187 views
0

我想用一个变量来确定条件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存储过程的一部分,但它不应该让我相信

+2

你能展示你的整个陈述吗? – Jeremy

+1

什么是整个查询? –

+0

查询是很长,但说是一个例子给出了同样的错误: 声明@GroupByFirst INT = 1 选择 sa.Name, 数从属性P (p.Id) 内加入的PropertyInfo PINFO上pinfo.Id = p.LiveInfoId 内部联接SolicitorAccount sa在pinfo.SolicitorAccountId = sa.Id 组由 情况下(@GroupByFirst不为空)然后sa.Name其他sa.Name结束 – Bartosz

回答

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(没有聚合功能,那是)。你可以使用表达式。

+0

就是这样,非常感谢! – Bartosz

0

申报@GroupByFirst VARCHAR(30)= 'S'

选择最大值(someval)从Login_Master 组由 情况下,当@GroupByFirst不为空则a.Name别的b.Name结束

0

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

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