2016-05-11 8 views
0

Iは、DENSE_RANK()が増加値ときにSELECT文のROW_NUMBER()列の番号を再起動したい場合ROW_NUMBER()値をリセットします。私は、カーソルでそれを実行しようとしましたが、私は私のデータの丸めの問題に直面しました。カーソルを使わないと他の方法がありますか?DENSE_RANK()値が増加し

DECLARE @RowNum as INT; 
DECLARE @DenseRank as INT; 
DECLARE @DenseRankPrevious as INT; 
DECLARE @RD_ROI1_minus_RD_ROI3 as NVARCHAR(MAX); 
DECLARE @RD_ROI2_minus_RD_ROI3 as NVARCHAR(MAX); 
DECLARE @Cursor as CURSOR; 

SET @RowNum = 0; 
SET @Cursor = CURSOR FOR 
    SELECT DENSE_RANK() OVER (ORDER BY [RD_RF_ID]) AS DenseRank, [RD_ROI1_minus_RD_ROI3] 
    FROM [dbo].[vw_Raw_Data] WHERE [dbo].[vw_Raw_Data].RD_GUID_ID = 433 

CREATE TABLE #TempTable(
RowNum int, 
DenseRank int, 
ROI1_New NVARCHAR(MAX)) 

OPEN @Cursor; 
FETCH NEXT FROM @Cursor INTO @DenseRank, @RD_ROI1_minus_RD_ROI3; 
SET @DenseRankPrevious = @DenseRank; 
WHILE @@FETCH_STATUS = 0 
BEGIN 

    IF @DenseRankPrevious = @DenseRank 
    SET @RowNum = @RowNum + 1; 
    ELSE 
    BEGIN 
    SET @RowNum = 0; 
    SET @RowNum = @RowNum + 1; 
    SET @DenseRankPrevious = @DenseRank; 
    END 

    INSERT INTO #TempTable 
    SELECT @RowNum, @DenseRank, @RD_ROI1_minus_RD_ROI3 ; 
    FETCH NEXT FROM @Cursor INTO @DenseRank, @RD_ROI1_minus_RD_ROI3; 
END 

CLOSE @Cursor; 
DEALLOCATE @Cursor; 

    SELECT * FROM #TempTable 
    DROP TABLE #TempTable 

上記のコードではなく、予想される次の以下の結果

- 1 1 178.409 
- 2 1 173.23 
- 3 1 164.867 
- 4 1 165.52 
- 5 1 153.351 
- 6 1 160.773 
- 7 1 157.694 

を与えます。

- 1 1 178,409039893888 
- 2 1 173,230282624222 
- 3 1 164,86654423018 
- 4 1 165,52035506581 
- 5 1 153,351290684624 
- 6 1 160,773492500765 
- 7 1 157,694316906438 

なぜこの丸めが発生するのでしょうか?前もって感謝します!

+1

私は混乱しています。あなたの質問は何ですか ?それはrow_numberまたは丸めの上にありますか? – Squirrel

答えて

0

なぜあなたは、このためにカーソルを使うのでしょうか?

SELECT ROW_NUMBER() OVER (PARTITION BY DenseRank ORDER BY (SELECT NULL)) as rn, 
     rd.* 
FROM (SELECT DENSE_RANK() OVER (ORDER BY rd.RD_RF_ID) AS DenseRank, 
      RD_ROI1_minus_RD_ROI3 
     FROM dbo.vw_Raw_Data rd 
     WHERE rd.RD_GUID_ID = 433 
    ) rd; 
+0

上記の答えは私が探していたまさにです。ステートメントは正常に動作し、データは丸められません。 –

関連する問題