2017-05-17 28 views
0

我有一個數據如何增加價值時,他們同樣

通過使用此查詢我得到的數據是這樣

Select ID,Val,Premium,Row_number()OVER(PARTITION BY ID,Val ORDER BY ID) RN From Table1 

目前的數據

ID Val Premium RN 
    1 CH  201  1 
    1 CH  0  1 
    1 CHH 301  2 
    1 CHS 401  3 

我怎樣才能讓這個數據喜歡目前查詢

ID Val Premium RN 
    1 CH  201  1 
    1 CH  0  4 
    1 CHH 301  2 
    1 CHS 401  3 

我只想讓這是相同RN以遞增到最大數目

纈氨酸= CH的數據具有RN = 1,那麼我想使高級= 0記錄到RN = 4

在本行號我需要選擇MAX(RN)和增量重複的值

回答

0

這應該做的伎倆:

UPDATE table1 
SET rn = (SELECT Max(rn) + 1 
      FROM table1) 
WHERE id IN (SELECT id 
       FROM table1 
       WHERE rn IN (SELECT rn 
          FROM table1 
          GROUP BY rn 
          HAVING Count(*) > 1)) 
     AND premium = 0; 

更新表。將新的RN值設置爲最高值+ 1。只有更新,其中有多個RN值,並且其中溢價爲0

+0

我只是想看看選擇查詢沒有任何DML – mohan111

+0

@ mohan111哦沒事,我只是想你'select'行,但它沒有顯示你發佈的輸出,你確定它是正確的? – moritzg

+0

請拿出最後的輸出數據工作查詢。忘記我的查詢 – mohan111

0
 --Try This 
    BEGIN TRAN 
        Declare @Strt INT,@End INT,@MaxNo INT 
        CREATE TABLE #TEMP_DATA (ID INT, VAL NVARCHAR(6),Premium INT) 

        INSERT INTO #TEMP_DATA 
        SELECT 1,'CH',201 UNION ALL 
        SELECT 1,'CH',0 UNION ALL 
        SELECT 1,'CHH',301 UNION ALL 
        SELECT 1,'CHS',401 UNION ALL 
        SELECT 1,'CHHS',501 UNION ALL 
        SELECT 1,'CHHS',0 


        SELECT ID,Val,Premium,DENSE_RANK()OVER(ORDER BY Val) RN INTO #T 
        FROM #TEMP_DATA 

        SET @Strt=1 
        SELECT @End= MAX(RN) FROM #T 

         WHILE @Strt<[email protected] BEGIN 

           SELECT @MaxNo=MAX(RN)+1 FROM #T 
           UPDATE #T SET RN= @MaxNo WHERE Premium=0 AND [email protected] 

          SET @[email protected]+1 

         END 

        SELECT * FROM #T 
ROLLBACK TRAN