2011-11-08 52 views
0

我想inlude的總數爲在查詢中的列:得到一組的總數由查詢

SELECT un.user, un.role 
FROM [Unique] un group by user, role; 

在此查詢我有2列,但我想添加第三列作爲在上面的查詢中計算的總行數。

+1

COUNT(un.user)? – Joe

+1

不知道具體情況,我的建議是以另一種方式獲取數據。大多數數據訪問技術都包含爲您提供結果集中返回的行數的功能。 –

回答

1

這下的MS Access 作品(並且是非常相似,將Oracle和其他數據庫下工作)

SELECT 
    un.user, 
    un.role, 
    (
     SELECT COUNT(*) 
     FROM (
      SELECT un1.user, un1.role 
      FROM [Unique] un1 group by user, role 
     ) 
    ) 
FROM [Unique] un group by user, role; 

下面是實際的Oracle語法:

SELECT 
    un."user", 
    un.role, 
    (
     SELECT COUNT(*) 
     FROM (
      SELECT un1."user", un1.role 
      FROM "Unique" un1 group by "user", role 
     ) 
    ) 
FROM "Unique" un group by "user", role; 

對於參考,這裏是SQL Server特定的解決方案,使用CTE

WITH Q([user], role) AS (
    SELECT un.[user], un.role 
    FROM [Unique] un group by [user], role 
) 
SELECT *, (SELECT COUNT(*) FROM Q) 
FROM Q 
1
SELECT un.user, un.role, 
    (select count(*) from 
     (Select user, role from [unique] group by user, role)) as CNT 
FROM [Unique] un 
group by user, role; 

雖然這將需要重新計算每個roweach時間...有可能有更好的方法。

我堅持我上面的評論,你可以從記錄集中得到這個,但通過大多數開發語言。所以讓它在查詢結果中返回而不是查看元數據是很奇怪的。

Select un.user, un.role 
From [unique] un 
group by grouping sets ((user, role),()) 
0

如果COUNT(*)不工作(和它不爲每個數據庫工作),你可以嘗試COUNT(0)代替。它比計算主鍵快。您可能期望COUNT(0)爲1,但實際上它總是返回行數。至少它在我曾經使用的每個數據庫上都有。當然,您可以使用任何其他常數而不是0 - 除了空值之外。