IF OBJECT_ID('tempdb..#temp','U') IS NOT NULL DROP TABLE #temp
create table #temp (
mobile VARCHAR(20) ,
manage CHAR(1),
)
INSERT INTO #temp
SELECT '1331234567','A' UNION ALL
SELECT '1331122345','A' UNION ALL
SELECT '1364215478','A' UNION ALL
SELECT '1891234567','A' UNION ALL
SELECT '1335478457','B' UNION ALL
SELECT '1336521425','B' UNION ALL
SELECT '1325412114','B' UNION ALL
SELECT '1352125201','B'UPDATE A
SET manage=null
FROM #temp AS A JOIN(
SELECT ROW_NUMBER() OVER (PARTITION BY manage ORDER BY GETDATE()) AS ID,* FROM #temp ) AS B ON a.mobile=B.mobile AND b.ID IN (1,2,3)

解决方案 »

  1.   

    先在with块里按manage做分组排序(rownumber over partition by),然后按manage取出max(rownumber)作为子表,最后自联case when 子表.max_rownumber = with块.rownumber就填值,其他都为空
      

  2.   

    ;with f as 
    (
    select id=row_number()over(partition by manage order by getdate()),* from tb
    )select mobile,case when id between 1 and 3 then null esle manage end as manage from f 
      

  3.   

    感谢,理论和实际都很到位。已经解决我的问题了。在我最无助的时候就是应该来到csdn求助。感激