首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql 存储过程 怎么写

2012-12-26 
sql 存储过程 如何写?我想写一个存储过程,实现上图效果,就是按class分类,然后设置value的值,弄个了半天,弄

sql 存储过程 如何写?
我想写一个存储过程,实现上图效果,就是按class分类,然后设置value的值,弄个了半天,弄不出来啊  大家帮帮忙啊 谢谢

[最优解释]

--CREATE TABLE huang (id INT ,class INT,VALUE int)
 --INSERT INTO Huang
 --SELECT 7,1,NULL 
 --UNION ALL 
 --SELECT 8,1,NULL 
 --UNION ALL 
 --SELECT 3,1,NULL 
 --UNION ALL 
 --SELECT 4,2,NULL 
 --UNION ALL 
 --SELECT 5,2,NULL 
 --UNION ALL 
 --SELECT 6,2,NULL 
 
 
 SELECT id,class,RANK()OVER(PARTITION BY class ORDER BY id)VALUE
 FROM Huang
 
 /*
 id          class       VALUE
 ----------- ----------- --------------------
 1           1           1
 2           1           2
 3           1           3
 7           1           4
 8           1           5
 4           2           1
 5           2           2
 6           2           3
 
 (8 行受影响)
 
 
 */

[其他解释]
造数据的那个你就不用看了,这个查询出来你再update过去
[其他解释]
引用:
SQL code
?



12345678910111213141516171819202122232425262728293031323334

--CREATE TABLE huang (id INT ,class INT,VALUE int)  --INSERT INTO Huang  --SELECT 7,1,NULL   --UNION ALL   --SELECT 8,……



是可以查询,不过我是要修改那个value的值  修改成那样  
[其他解释]
;with cte as (SELECT id,class,RANK()OVER(PARTITION BY class ORDER BY id)VALUE
  FROM Huang)
update tb
set a.value=b.value
from tb a inner join cte b on a.id=b.id
[其他解释]
引用:
;with cte as (SELECT id,class,RANK()OVER(PARTITION BY class ORDER BY id)VALUE
  FROM Huang)
update tb
set a.value=b.value
from tb a inner join cte b on a.id=b.id



这个还是不行啊  报错  无法绑定由多个部分组成的标识符 "a.value"。


[其他解释]

;with cte as (SELECT id,class,RANK()OVER(PARTITION BY class ORDER BY id)VALUE
   FROM Huang)
 update a
 set a.value=b.value
 from tb a inner join cte b on a.id=b.id


其实很简单,你把查询出来的插入一个临时表更新就得了。
[其他解释]
引用:
SQL code
?



12345

;with cte as (SELECT id,class,RANK()OVER(PARTITION BY class ORDER BY id)VALUE    FROM Huang)  update a  set a.value=b.value  from tb a inner join cte b on a.id=b.id

其实很简……


呵呵 可以了  昨晚弄错了 谢谢哈 O(∩_∩)O~

热点排行