2016-07-27 17 views
0

我真的不知道如何正確解釋我的問題,我使用子查詢來只帶有不同的ProducerCode字段。 但現在我只需要序列號的基本行標識符,但是當我使用ROW_NUMBER函數時,它給了我奇怪的數字。 使用SQL 2012,SSRS 2010 這裏是我的代碼:如何顯示順序ROW_NUMBER如果重複的ID不在查詢中

;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

我試圖實現在SSRS與表達

=RowNumber(Nothing) 

但它跳過號碼以及: enter image description here

如何顯示序列行號?

+0

嘗試'ROW_NUMBER()OVER(ORDER BY(SELECT 100))as RowNum'。還要注意外部順序是cte的RowNum列中的非排序值。數據集或tablix中的其他過濾器將制動序列。 –

+0

我脫掉了最後一個Order By,並使用了'ROW_NUMBER()OVER(ORDER BY(SELECT 100))'作爲RowNum',但是序列仍然中斷 – Oleg

回答

0

請嘗試以下代碼一次,讓我,如果有任何疑問

 
;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

你應該只需要一個ROW_NUMBER()因爲你已經通過GROUP BY讓你CTE生產者代碼和名稱的不同列表:

;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 
相關問題