2015-11-04 182 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