2013-04-25 212 views
0

我有兩個表,表a和表b。在SQL中計算總數

表被設置像...

用戶

Id ... InspectStat PurchaseStat SoldStat POSStat 
------------------------------------------------------------ 
1   
2 
3 

屬性

UserId ... Stage 
---------------------------------------------------  
    1  Inspect 
    3  Purchase 
    1  Sold 
    2  POS 

我想寫一個工作,將每隔一小時,計算每個百分比用戶在每個階段的總屬性。因此,例如,最終的結果應該是這樣的(假設僅存在這些4個屬性)

Id ... InspectStat PurchaseStat SoldStat POSStat 
------------------------------------------------------------ 
1   .5    0    .5   0 
2   0    0    0   1.0 
3   0    1.0   0   0 

我試圖

ALTER PROCEDURE [dbo].[StatCounter] 

AS 
DECLARE @PropertyCount as float 

BEGIN 

set @PropertyCount = (select count(AcquisitionAssociateId) from [dbo].[Properties],  [dbo].[Users] 
WHERE 
    [dbo].[Users].Id = [dbo].[Properties].AcquisitionAssociateId) 
update [dbo].[Users] 
set [dbo].[Users].PurchaseStat = ((select count (AcquisitionAssociateId) from [dbo].[Properties] 
WHERE 
    [dbo].[Users].Id = [dbo].[Properties].AcquisitionAssociateId 
    and 
    [dbo].[Properties].Stage = 'Purchase')/@PropertyCount) 

...Repeat for 3 other stages 

此方法正確地計數在每個級的屬性數,但是在執行它之後,我意識到它實際上在做的是統計具有用戶分配給它們的屬性的數量,而不是明確計算單個用戶實際擁有的屬性的數量。我正在學習SQL,因此非常感謝您的幫助。

+1

做「分配屬性,以用戶」什麼條款,以及「性能用戶」,其實是什麼意思? – 2013-04-25 15:26:18

+0

什麼是RDBMS?它看起來像SQL Sever。請確認。 – EricZ 2013-04-25 15:30:26

+0

@丹 - 我的意思是,每個屬性都有一個用戶,或沒有用戶,分配給它。我試圖計算用戶分配給它們的屬性總數(當表b中的UserId與表a中的Id相等時),然後計算四個階段中每個階段的屬性百分比。 – 2013-04-25 15:38:18

回答

1

這是一個數據透視的特例。以下計算使用avg()。它的統計分配的「1」的值和平均通過總做的劃分上排:

select userid, 
     avg(case when Stage = 'Inspect' then 1.0 else 0.0 end) as InspectStat, 
     avg(case when Stage = 'Purchase' then 1.0 else 0.0 end) as PurchaseStat, 
     avg(case when Stage = 'Sold' then 1.0 else 0.0 end) as SoldStat, 
     avg(case when Stage = 'POS' then 1.0 else 0.0 end) as POSStat 
from properties p 
group by userid 
+0

謝謝,那給了我我正在尋找的答案。 – 2013-04-25 15:48:33