2015-12-03 93 views
1

我是SQL新手,已經設法足夠強大地獲取基本函數,但是我現在試圖從內部結果中找到至少具有兩個令牌的人員加盟:將連接結果和至少一個函數結合起來

SELECT 
    users.[First Name], 
    users.[Last Name], 
    IssuedTokens.UserID, 
    IssuedTokens.TokenID, 
    Tokens.TokenType 
FROM IssuedTokens 
INNER JOIN users ON users.ID = IssuedTokens.UserID 
INNER JOIN Tokens ON Tokens.number = IssuedTokens.TokenID 
GROUP BY IssuedTokens.UserID 
HAVING COUNT(*) >= 2 
ORDER BY IssuedTokens.UserID 

這給了錯誤:

Column 'Users.First Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

我舒適的使用對預先存在的表的功能,但還沒有看到如何操縱的連接的結果。如果有人可以幫助它,將不勝感激。

+0

這不是如何按羣組工作。你有不同的閱讀材料嗎? – Drew

+1

你使用的是MySQL還是SQL Server? (其中一個產品可能與GROUP BY有點「不同」......) – jarlh

+0

@Drew我實際上並不打算在那裏留下那一點,它是結合處理連接的一個函數的結果另一個處理計數。雖然我想 –

回答

0

你可以做一個單獨的聚合 - 在join之前 - 獲取具有多個令牌的用戶。然後,查詢的其餘部分不需要聚合:

SELECT u.[First Name], u.[Last Name], u.UserID, it.TokenID, t.TokenType 
FROM IssuedTokens it INNER JOIN 
    users u 
    ON u.ID = it.UserID INNER JOIN 
    Tokens t 
    ON t.number = it.TokenID INNER JOIN 
    (SELECT it.UserId 
     FROM IssuedTokens it 
     GROUP BY it.UserId 
     HAVING COUNT(*) >= 2 
    ) itu 
    ON itu.UserId = it.UserId 
ORDER BY it.UserID; 
+0

感謝您的回覆,我試着編譯它並得到錯誤:無法綁定多部分標識符「it.UserId」。 –

相關問題