2012-02-23 4 views
1

enter image description hereSQL共通テーブル式またはその他の方法を使用している割合はどうですか? DATASET2を取得するための

私は理由に特定のレコードの割合を計算する必要があり、次の

;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 

をしていますDataset3を得るための以下の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 

を使用しています= Case1はDatset2の全レコードのうち

+1

データセット2と3のクエリから始め、そのデータセットにCOUNTを追加します。次に、 "LEFT OUTER JOIN"を使用して新しいクエリを結合し、 "3"クエリの一致にかかわらず "2"クエリの各行の出力行を取得します。その後、必要に応じて "3"カウントで0を書き込むための簡単な「COALESCE」、100を倍数にして「2」カウントで割ります。 – HABO

+0

ありがとうございます。しようとします .. –

答えて

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 

このビューには、その後、このいずれかのように後続の問合せや機能、利用可能です:理由=「ケース1」と、最新のレコードの出現箇所の数をカウントします

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

、および除算それは最新のレコードの総数(あなたのパーセンテージを与える)で表します。

関連する問題