当前位置: 代码迷 >> Sql Server >> sql批量修改的有关问题,求帮忙,没多少分了,全来了
  详细解决方案

sql批量修改的有关问题,求帮忙,没多少分了,全来了

热度:68   发布时间:2016-04-24 10:01:58.0
sql批量修改的问题,求帮忙,没多少分了,全来了
情况是这么这样的
原始表数据如下
id     aa   bb   cc
1 1 a
2 2 a
3 3 a
4 4 c
5 5 c
6 4 ds
7 3 ad
我想批量修改bb的值,让它根据cc相等递增,变成如下效果
id     aa   bb          cc
1 1 1001 a
2 2 1001  a
3 3 1001 a
4 4 1002 c
5 5 1002 c
6 4 1003 ds
7 3 1004 ad
求sql脚本
------解决方案--------------------
CREATE TABLE test(id int, aa int, bb int, cc varchar(2))
GO
INSERT INTO test
SELECT 1,1,NULL,'a' UNION ALL
SELECT 2,2,NULL,'a' UNION ALL
SELECT 3,3,NULL,'a' UNION ALL
SELECT 4,4,NULL,'c' UNION ALL
SELECT 5,5,NULL,'c' UNION ALL
SELECT 6,4,NULL,'ds' UNION ALL
SELECT 7,3,NULL,'ad'
GO
WITH t AS(
SELECT cc,
       ROW_NUMBER() OVER (ORDER BY MIN(id)) n
  FROM test
 GROUP BY cc
)
UPDATE test
   SET bb=t.n+1000
  FROM test,t
 WHERE t.cc = test.cc

SELECT * FROM test

         id          aa          bb cc
----------- ----------- ----------- ----
          1           1        1001 a
          2           2        1001 a
          3           3        1001 a
          4           4        1002 c
          5           5        1002 c
          6           4        1003 ds
          7           3        1004 ad

------解决方案--------------------
1 1 1001 a
2 2 1001  a
3 3 1001 a
4 4 1002 c
5 5 1002 c
6 4 1003 ds
7 3 1004 ad
有个问题如果在家一行。
8     3       null        a 这一列 的BB应该是递增为1005 还是和为1001了.
  相关解决方案