2012-07-31 49 views
3

我在做我認爲是最簡單的查詢之一時發生此錯誤!我看到其他人也遇到了問題,我瀏覽了我見過的每個解決方案,但他們涉及更多的查詢,所以我很難挑出問題。我做了一張小桌子來說明我的問題。使用分組時的SQL錯誤:每個GROUP BY表達式必須包含至少一個不是外部引用的列

表名:grouptest

id name 
1 Mel 
2 Lucy 
3 Mandy 
4 Mel 
5 Mandy 
6 Mel 

我想找出每個名字有多少次出現後,產生類似的表:

3 Mel 
2 Mandy 
1 Lucy 

這是我想查詢應該工作:

SELECT Count(id), Name 
FROM groupbytest 
GROUP BY 'Name' 

我得到的錯誤:

幫助!

回答

5

您在名稱字段周圍引用了不需要的引號。

SELECT Count(id), Name 
FROM grouptest 
GROUP BY Name 

根據您的意見,您需要CASTName柱:

SELECT Count(id), Cast(Name as Varchar(max)) Name 
FROM grouptest 
GROUP BY Cast(Name as Varchar(max)) 
+0

是的!完美的工作:)如果你有時間,你能解釋爲什麼工作/是必要的嗎?也感謝你這麼快速的迴應。 – Mel 2012-07-31 18:56:29

+0

@明白問題在於你試圖按照不允許的數據類型對數據進行分組。您的表格中有文本,ntext或圖像字段。您需要使用可以分組的數據類型。我使用'varchar(max)'將數據轉換爲允許的類型。你也可以將它轉換爲'nvarchar(max)'。 – Taryn 2012-07-31 18:58:26

1

你想:

SELECT Count(id), [Name] 
FROM groupbytest 
GROUP BY [Name] 

GROUP BY 'Name'試圖小組文字串 '名稱',而不是列Name

Name也可能是一個保留字,因此圍繞它的括號,雖然你最好不要撥Name列。

+0

我改變了列名只是爲了消除這種可能性,但加括號給了我同樣的錯誤,當我穿上」除非使用IS NULL或LIKE運算符,否則不能比較或排序文本,ntext和圖像數據類型。 – Mel 2012-07-31 18:50:19

+0

然後,您需要將'Name'列轉換爲varchar。 – LittleBobbyTables 2012-07-31 18:51:25

5

失去了'GROUP BY

SELECT Count(id), Name 
FROM groupbytest 
GROUP BY Name 

如果nametext,那麼你需要將它轉換爲VARCHAR,但你可能會截斷你的專欄。

SELECT Count(id), CAST(Name AS VARCHAR(8000)) AS Name 
FROM groupbytest 
GROUP BY CAST(Name AS VARCHAR(8000)) 
+0

如果我失去了's,我得到這個錯誤:文本,ntext和圖像數據類型不能比較或排序,除非使用IS NULL或LIKE運算符。 – Mel 2012-07-31 18:45:16

+0

@Mel - 在這種情況下,消息很明確。您無法按該數據類型的列進行分組。你可以嘗試先投射到'VARCHAR' – Lamak 2012-07-31 18:46:36

+0

+1再次擊敗我......再次 – Taryn 2012-07-31 18:50:59

相關問題