2012-10-25 273 views
2

我有一個健康俱樂部的SQL Server數據庫中的客戶列表。 客戶列出了他們加入的日期和更新的次數 我希望能夠計算續訂客戶的百分比率。關於如何做到這一點的任何想法?謝謝。TSQL計算百分比

+3

你怎麼知道他們沒有?每個客戶的到期日期?或者所有成員資格都是相同的長度,例如一個月?你是否在意他們的會員資格是不連續的? – HABO

+0

聞起來像功課。 – invert

+0

@invert是否會使問題變得更加有效? –

回答

1

這是你正在尋找

Declare @t table(Id Int Identity,CustomerName Varchar(50),DOJ Datetime,IsRenewed bit) 
Insert Into @t Values('Name1','1/1/2012',1),('Name2','10/1/2012',1),('Name3','10/2/2012',0) 

Select PercentageCustomerRenewed = 
Cast((Count(*) * 100)/(Select Count(*) From @t) AS Numeric(10,2)) 
From @t 
where IsRenewed = 1 

結果什麼

PercentageCustomerRenewed 
66.00 
+0

您可以發佈樣本數據,並期望outout ..所以你可以很容易地得到解決方案 –

+0

這是我迄今爲止。我可以使查詢的第一部分工作,但我無法正確地將兩個select語句組合在一起。 - 第1部分:RenewalCount =次數 - 每個客戶續訂 SELECT * FROM (SELECT JoinDate,RenewalCount,YEAR(getdate()) - YEAR(JoinDate) - CASE WHEN MONTH(GETDATE())> MONTH GETDATE()) 或者MONTH(GETDATE())= MONTH(GETDATE())和DAY(GETDATE())> = DAY(GETDATE())then 0 else 1 end AS PotentialRenewal FROM Table)percRenewal --Part 2 選擇100.0 * SUM(更新)/ SUM(潛在更新) 從表AS percRenewal – steve

3

如果有一個表subscriptions每個用戶只有一行,是被帶着幾分isrenewed更新:

SELECT 
    SUM(SIGN(isrenewed)) * 100/COUNT(*) 
    AS Percentage 
    FROM subscriptions 

輸出

Percentage 
--------------- 
66,666666 

如果你想圓表達

Percentage 
--------------- 
66 

如果你有一個表subscriptions用戶特定的列userid這裏有你可以將它轉換爲int

SELECT 
    CAST(
     SUM(SIGN(isrenewed)) * 100/COUNT(*) 
     AS int) 
    AS Percentage 
    FROM subscriptions 

輸出兩排意味着訂閱被續訂:

SELECT 
    (SELECT TOP 1 COUNT(*) OVER() 
    FROM subscriptions 
    GROUP BY userid 
    having COUNT(*) > 1) 
    * 100/COUNT(*) AS Percentage 
    FROM subscriptions 
+0

感謝您的答案。 Jan用子查詢來做這個方法比第一篇文章要容易一些。他們續約時沒有2個條目。有一個字段說明更新並列出客戶續訂的次數。我仍然能夠使用你的方法嗎?謝謝。 – steve

+0

更新了我的答案,這是第二個。 – Jan

+0

謝謝。我想出一個沒有道理的數字。我將不得不對此做更多的研究。 – steve