2015-10-05 104 views
1

在同一個表上有兩個SQL選擇。第一選擇顯示所需的用戶數據。第二選擇查找使用「首字母」的次數。該值往往被多次使用,雖然它不應該將兩個SQL選擇合併爲一個結果

我不希望有更低的行,查詢1,但加上「初始計上的所有」

- 首先查詢出所有需要數據

SELECT 
    UserID, Username, Initials 
FROM  
    dbo.Users 

這個查詢就可以計算Initaials

SELECT 
    Initials, count(*) as InitialCount 
FROM  
    dbo.Users 
GROUP BY 
    Initials 

輸出:

UserID | Username | Initals | Initialcount 
----------------------------------------------  
    1 | Peter Pan |  PP | 2 
    2 | Paul Pax |  PP | 2 
    3 | John Doe |  JD | 1 
+1

您使用的是哪個版本的SQL Server? –

回答

5

可以使用COUNT()OVER()獲得每組(由PARTITION BY定義)的計數沒有GROUP BY

SELECT 
    UserID 
    , Username 
    , Initials 
    , COUNT(*) OVER(PARTITION BY Initials) AS InitialCount 
FROM  
    dbo.Users 

通常被稱爲解析或窗函數,OVER()可以與像MIN()聚合函數可以使用,MAX()SUM()

0
SELECT UserID, Username, Inititials, 
(SELECT COUNT(*) FROM dbo.Users U2 WHERE U2.Inititals = U1.Initials) InitialCount 
FROM dbo.Users U1 
0

所以請嘗試使用不同取決於關鍵字您可能需要執行自我加入的數據。我只是學習SQL,所以我可能不正確。

SELECT DISTINCT UserID, Username, Initials, count(Initials) as InitialCount 
FROM  dbo.Users 
GROUOP BY UserID 
+0

我不認爲你可以在一個語句中做DISTINCT和GROUP BY。 GROUP BY主要爲您完成獨特的操作。 –