2017-10-12 98 views
0

應該有希望是一個簡單的問題,但我無法完全理解它。 Sql server 2012跨服務器組的2個結果集的sql服務器比率由

基本上,我有一個用戶表。每個用戶都有一個'pincode',這是他們下面組織的外鍵。然後每個用戶完成多個模塊,並存儲在由其user_id鏈接的獨立表格中。我想得到的是所有pincode的列表,包括用戶總數,完成總數,然後是用戶數量除以完成數量的比率。

下面的代碼給了我一個結果列表,其中第一個結果是完成數,第二個結果是用戶數,所以這是我需要的數據,我只是無法弄清楚如何作爲一個結果返回比率列。所以......

select pincode, count(*) as totcomps from modules 
inner join users on users.user_id=modules.user_id 
group by pincode 

union all 

select pincode, count(*) as totusers from users 
group by pincode 
order by pincode 

返回我

site1 50 // number of completions 
site1 10 // number of users 
site2 130 
site2 12 
site3 2 
site3 1 
etc 
. 

我想是它的返回:一如往常

site1 50, 10, 5 // pincode, totcomps, totusers, totcomps/totusers 
site2 130, 12, 10.83 
site3 2, 1, 2 
etc.... 

,你的幫助是非常讚賞

回答

1

這裏一種方法可以解決這個問題。不是100%肯定的,因爲我們沒有任何ddl或樣本數據。

with pincodes as 
(
    select pincode 
     , count(*) as totcomps 
    from modules 
    inner join users on users.user_id = modules.user_id 
    group by pincode 
) 
, Users as 
(
    select pincode 
     , count(*) as totusers 
    from users 
    group by pincode 
) 

select p.pincode 
    , p.totcomps 
    , u.totusers 
    , p.totcomps/(u.totusers * 1.0) --need to multiply by 1.0 to avoid integer division 
from pincodes p 
join Users u on u.pincode = p.pincode 
+0

奇妙的是,不得不稍微修改它,但那正是我想要的。以前從未使用/聽說過關鍵字,現在閱讀。乾杯! – user3442107

+0

這是一個通用表格表達式。那裏有很多文檔和例子。很高興爲你工作。 –