2012-02-23 41 views
1

enter image description here請使用SQL公共表表達式或其他方式的百分比?

對於獲得Dataset2我使用下面的CTE

;WITH RecordsWithNoDuplicates_CTE (RowNo,[Name] 
     ,[DateAdded] 
     ,Reason 
    ) AS 
(
SELECT ROW_NUMBER() OVER (PARTITION BY name Order by DateAdded DESC) AS 'RowNo' 
    ,Name, 
    DateAdded, 
    Reason 
FROM 
    MyTable 
) 
SELECT * FROM RecordsWithNoDuplicates_CTE where rowno=1 

爲了得到Dataset3我做了以下

;WITH RecordsWithSpecificCase_CTE (RowNo,[Name] 
      ,[DateAdded] 
      ,Reason 
     ) AS 
    (
    SELECT ROW_NUMBER() OVER (PARTITION BY name Order by DateAdded DESC) AS 'RowNo' 
     ,Name, 
     DateAdded, 
     Reason 
    FROM 
     MyTable 
    WHERE REASON='Case1' 
    ) 
    SELECT * FROM RecordsWithSpecificCase_CTE where rowno=1 

我需要計算的記錄,具體到一個理性的百分比= Case1中數據集2中的所有記錄

+1

從數據集2和3的查詢開始,向它們添加COUNT。然後,使用'LEFT OUTER JOIN'結合新查詢,以便在「2」查詢中爲每行獲取輸出行,而不管「3」查詢中是否有任何匹配。然後根據需要快速的「COALESCE」填充「3」計數的零點,乘以100再除以「2」計數。 – HABO 2012-02-23 17:45:29

+0

謝謝。會嘗試 .. – 2012-02-23 20:41:38

回答

0

只是爲了擴大上面的評論一點..

在你的情況下,我可能會首先製作一個視圖或函數來獲取最新的記錄。這個 只是CTE的一個包裝,並且會阻止你重複它。

CREATE VIEW LatestRecords 
AS 
    WITH RecordsWithNoDuplicates_CTE AS 
    (
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY name Order by DateAdded DESC) AS RowNo, 
     Name, 
     DateAdded, 
     Reason 
    FROM 
     MyTable 
    ) 
    SELECT * FROM RecordsWithNoDuplicates_CTE WHERE RowNo=1 

該視圖然後可用於隨後的查詢和功能,例如此一:

SELECT 
    100*Count(CASE WHEN Reason='Case1' THEN 1 ELSE NULL END)/Count(*) as Percentage 
FROM LatestRecords 

將計數與原因=「案例1」一個最新記錄的出現次數的數量,併除以它由最新記錄的總數(給出你的百分比)。