2015-11-09 54 views
-1
SELECT [a],[b],[c],COUNT(*) AS Hits 
FROM [dbo].[ta] join [dbo].[tb] on [tb].[id] = [ta].[id] 
where GROUP BY [a],[b],[c] 

我想選擇c列,但不是按cluase組中的組? 因爲列「C」是由子句返回不suifficient記錄時在組如何選擇不是按分組排列的名稱


我當前的查詢是

SELECT top 20 [headshot], 
       [athleteId], 
       [athleteName], 
       COUNT() AS Hits 
    FROM [dbo].[tblRep_Usecase2] 
    join [dbo].[tblRep_Login] on [tblRep_Login].[ID] = [tblRep_Usecase2].[ID] 
    where athleteName != 'NULL' 
    and headshot != 'NULL' 
    and headshot != '' 
    and convert(date,[tblRep_Usecase2].[insertDate]) >='11/9/2015' 
    and convert(date,[tblRep_Usecase2].[insertDate]) <='11/9/2015' 
    and [tblRep_Usecase2].[appsportid]='41' 
GROUP BY [headshot],[athleteId],[athleteName] 
HAVING COUNT()>1 order by Hits DESC 
+0

你能更清楚嗎?從哪個表格中選擇a,b和c中的每一個? – mikeagg

+1

如果你想選擇它的原始值,你顯然不能在邏輯上從GROUP BY中刪除[c]。當給定[a]和[b]組合存在多個[c]值時,無法「神奇地」將它們合併成單個記錄 - 您需要將[c]與[a]和[ b](爲每個單獨的[c]值獲取多個記錄),或根據您的情況使用像max(),min()等函數來聚合值... –

回答

0

簡短的回答:不能。

較長的答案:您必須應用公式來定義如何區分「c」數據。

例如,如果您有任何關於孩子喜歡

|a  |b  |c  | 
|-------|-------|---------| 
|Bob |Sarah |Amanda | 
|Bob |Sarah |Steve | 
|Bob |Amanda |Sarah Jr.| 

表你問他的每夫婦(所以鮑勃+薩拉= 2,鮑勃+阿曼達= 1)孩子的數量,但你還問他一個孩子的名字。既然他不能告訴你你想要哪個孩子,他不能給你結果。

在這種情況下,可能是Bob,Sarah,Amada,Steve和Sarah Jr與他們的年齡在別處。所以如果你只想要最老的孩子,你需要返回a,b,「subquery」,「count」。根據情況,像MAX/MIN這樣的簡單集合函數也可以工作。

+0

這裏是我的查詢,我不知道SELECT top 20 [headshot],[athleteId],[athleteName],COUNT(*)AS Hits FROM [dbo]。[tblRep_Usecase2] join [dbo]。[tblRep_Login] on [tblRep_Login]。[ID] = [tblRep_Usecase2]。[ID] where athleteName!='NULL'and headshot!='NULL'and headshot!=''and convert(date,[tblRep_Usecase2]。[insertDate])> = '11/9/2015' and convert(date,[tblRep_Usecase2]。[insertDate])<='11/9/2015'and [tblRep_Usecase2]。[appsportid] ='41' GROUP BY [heads熱門] [運動員身份],[運動員名稱]有一個命令點擊DESC –

+0

那麼,讓我這樣說:如果從GroupBy子句中刪除運動員名稱會改變你的結果,那麼意味着在任何一點,athleteId +爆頭返回超過1個atheleteName結果。 編輯:相反,如果atheleteId是基於headshot和athleteId的確定性,那麼您應該簡單地將它添加到「GROUP BY」子句 –