2011-09-04 75 views
1

我想要做類似以下的事情。獲取有關GROUP BY列的列

SELECT aspnet_Users.UserName, aspnet_Membership.Email, count(*) as Activities 
FROM aspnet_Users 
    INNER JOIN Activities ON aspnet_Users.UserId = Activities.ActUserID 
    INNER JOIN aspnet_Membership ON aspnet_Users.UserId = aspnet_Membership.UserId 
    WHERE Activities.ActDateTime >= GETDATE() 
    GROUP BY aspnet_Users.UserName 
    ORDER BY Activities DESC 

但是這給了我一個錯誤。

列'aspnet_Membership.Email'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。

我理解錯誤一些。我試圖選擇不屬於分組的一列。

然而,總是會有aspnet_Membership.Email和aspnet_Users.UserId之間一比一的關係。那麼我將如何實現這一點?

+0

電子郵件和UserId之間的關係有什麼相關性?爲什麼你想選擇電子郵件,但不想按它分組? –

回答

3

變化:

GROUP BY aspnet_Users.UserId 

要:

GROUP BY aspnet_Users.UserName, aspnet_Membership.Email 

不知道爲什麼你認爲你需要提到在分組的用戶ID列,如果你不不想退貨,或者你爲什麼認爲你不應該按想要退貨的列進行分組。

+0

對不起,我正在做的一些不同的修改讓我的問題陷入了我的問題(現在已經糾正)。是的,你的建議有效。但是,我並不清楚如何。如果在兩個「GROUP BY」列之間存在一對一的關係,那麼'SELECT'ed列將始終反映該單一關係?而且,如果兩欄之間沒有一對一的關係,那麼該陳述會做什麼?感謝您提供任何其他提示。 –

+0

我不是在追問你的問題。你能否展示一些代表一對一關係的樣本數據,以及一些樣本數據「如果沒有一對一關係」? –

0

要選擇一個列,它必須位於group by子句中或聚合,您可以考慮按(aspnet_Users.UserName,aspnet_Membership.Email,aspnet_Users.UserId)進行分組。

我的猜測是,它會工作