2016-07-27 3 views
0

問題を正しく説明する方法がわかりません。サブクエリを使用してProducerCodeフィールドのみを表示します。 しかし、今は基本的にシーケンス番号を持つ行識別子が必要ですが、ROW_NUMBER関数を使用すると奇妙な数字が返されます。 SQL 2012を使用して、ここでSSRS 2010 が私のコードです:重複したIDがクエリに含まれていない場合、シーケンシャルなROW_NUMBERを表示する方法

;WITH cte_Counts --C 
AS 
    (
     SELECT  ROW_NUMBER() OVER (ORDER BY ProducerCode) as RowNum, 
        ProducerCode, 
        ProducerName, 
        COUNT (distinct ControlNo) as Submissions, 
        SUM(CASE WHEN QuotedPremium IS NOT NULL THEN 1 ELSE 0 END) as Quotes, 
        SUM(CASE WHEN Status IN ('Bound','Cancelled','Notice of Cancellation','Non-Renewed') THEN 1 ELSE 0 END) AS Binds, 
        SUM(CASE WHEN Status = 'Declined' THEN 1 ELSE 0 END) as Declines 
     FROM  ClearanceReportMetrics 
     WHERE  YEAR(EffectiveDate)=2016 
        AND CompanyLine = 'Arch Insurance Company' 
     GROUP BY ProducerCode,ProducerName 
    ) 

SELECT * FROM 
      (
       SELECT RowNum, 
         ROW_NUMBER() OVER (PARTITION BY ProducerCode ORDER BY Submissions DESC) as num, 
         ProducerCode, 
         ProducerName as 'Producer',   
         Submissions, 
         Quotes, 
         Binds, 
         Declines, 
         COALESCE(CAST(Binds as FLOAT) /NULLIF(Submissions,0),0) as 'Sub. to Bind', 
         COALESCE(CAST(Quotes as FLOAT) /NULLIF(Submissions,0),0) as 'Sub. to Qt', 
         COALESCE(CAST(Binds as FLOAT) /NULLIF(Quotes,0),0) as 'Qt to Bind', 
         COALESCE(CAST(Declines as FLOAT) /NULLIF(Submissions,0),0) as 'Sub to Dec' 

       FROM cte_Counts 
        ) a 
WHERE a.num=1    
ORDER BY  
      Submissions DESC 

enter image description here

私が表現

=RowNumber(Nothing) 

とSSRSにそれを達成しようとしたが、それは同様の番号をスキップ: enter image description here

シーケンス番号だけを表示するにはどうすればよいですか?

+0

RowNumとして 'ROW_NUMBER()OVER(ORDER BY(SELECT 100))を試してみてください。また、外側のorder byはcteのRowNum列の値をソートしていないことにも注意してください。データセットまたはタブリックスの追加のフィルタによってシーケンスが制動されます。 –

+0

私は最後のOrder Byを離し、RowNumとして 'ROW_NUMBER()OVER(ORDER BY(SELECT 100))を使用しましたが、シーケンスはまだ壊れています。 – Oleg

答えて

0

一度コードの下に試してみて、あなたはすでにGROUP BY経由でCTEでプロデューサーのコードと名前の明確なリストを取得しているとして、任意の質問

 
;WITH cte_Counts --C 
AS 
    (
     SELECT  ROW_NUMBER() OVER (ORDER BY ProducerCode) as RowNum, 
        ProducerCode, 
        ProducerName, 
        COUNT (distinct ControlNo) as Submissions, 
        SUM(CASE WHEN QuotedPremium IS NOT NULL THEN 1 ELSE 0 END) as Quotes, 
        SUM(CASE WHEN Status IN ('Bound','Cancelled','Notice of Cancellation','Non-Renewed') THEN 1 ELSE 0 END) AS Binds, 
        SUM(CASE WHEN Status = 'Declined' THEN 1 ELSE 0 END) as Declines 
     FROM  ClearanceReportMetrics 
     WHERE  YEAR(EffectiveDate)=2016 
        AND CompanyLine = 'Arch Insurance Company' 
     GROUP BY ProducerCode,ProducerName 
    ) 

    Select * FROM 
    (

SELECT ROW_NUMBER() OVER (ORDER BY ProducerCode) AS NEW_ROW_NUMBER,* FROM 
      (
       SELECT RowNum, 
         ROW_NUMBER() OVER (PARTITION BY ProducerCode ORDER BY Submissions DESC) as num, 
         ProducerCode, 
         ProducerName as 'Producer',   
         Submissions, 
         Quotes, 
         Binds, 
         Declines, 
         COALESCE(CAST(Binds as FLOAT) /NULLIF(Submissions,0),0) as 'Sub. to Bind', 
         COALESCE(CAST(Quotes as FLOAT) /NULLIF(Submissions,0),0) as 'Sub. to Qt', 
         COALESCE(CAST(Binds as FLOAT) /NULLIF(Quotes,0),0) as 'Qt to Bind', 
         COALESCE(CAST(Declines as FLOAT) /NULLIF(Submissions,0),0) as 'Sub to Dec' 

       FROM cte_Counts 
        ) a 
WHERE a.num=1  
)  A  
ORDER BY  
      Submissions DESC
+0

' NEW_ROW_NUMBER'列は順序どおりではありません。最後に「ORDER BY NEW_ROW_NUM」と言うと、それは機能します。しかしそれは提出物によってソートされません – Oleg

0

あなたは1 ROW_NUMBER()のみを必要とする必要があるなら、私に聞かせてください。

;WITH cte_Counts --C 
AS 
    (
     SELECT  ProducerCode, 
        ProducerName, 
        COUNT (distinct ControlNo) as Submissions, 
        SUM(CASE WHEN QuotedPremium IS NOT NULL THEN 1 ELSE 0 END) as Quotes, 
        SUM(CASE WHEN Status IN ('Bound','Cancelled','Notice of Cancellation','Non-Renewed') THEN 1 ELSE 0 END) AS Binds, 
        SUM(CASE WHEN Status = 'Declined' THEN 1 ELSE 0 END) as Declines 
     FROM  ClearanceReportMetrics 
     WHERE  YEAR(EffectiveDate)=2016 
        AND CompanyLine = 'Arch Insurance Company' 
     GROUP BY ProducerCode,ProducerName 
    ) 

SELECT ROW_NUMBER() OVER (ORDER BY Submissions DESC) as RowNum, 
     * 
     FROM 
      (
       SELECT ProducerCode, 
         ProducerName as 'Producer',   
         Submissions, 
         Quotes, 
         Binds, 
         Declines, 
         COALESCE(CAST(Binds as FLOAT) /NULLIF(Submissions,0),0) as 'Sub. to Bind', 
         COALESCE(CAST(Quotes as FLOAT) /NULLIF(Submissions,0),0) as 'Sub. to Qt', 
         COALESCE(CAST(Binds as FLOAT) /NULLIF(Quotes,0),0) as 'Qt to Bind', 
         COALESCE(CAST(Declines as FLOAT) /NULLIF(Submissions,0),0) as 'Sub to Dec' 

       FROM cte_Counts 
        ) a   
ORDER BY RowNum 
関連する問題