Chinaunix

标题: 问个mysql存储过程? [打印本页]

作者: lihe_lihe1981    时间: 2010-08-16 09:11
标题: 问个mysql存储过程?

问个mysql存储过程的问题
有基表
T1
id     s_id      o_id        num
1        a             a            1
2        b             a            1
3        b             a            1
4        b             a            2
5        c             b            3

现想转换为
T2(列上1,2,3为num的1,2,3)1,2,3下的数据位count所得
s_id   o_id     1      2     3
a       a          1      0     0
b       a          2      1     0
c       b           0      0     1
基表T1的数据动态变化要求T2根据T1动态生成。
俺需要个动态的比方我在T1在加行数据能自动在T2生成,T1加行
6    c    b   3
T2第三行自动变成 c    b  0  0  2
T1 变成
7    c   b   4
T2变成
s_id   o_id     1        2       3     4

a        a        1        0        0     0
b        a        2        1        0     0
c        b        0        0        1     1

谢谢
作者: cenalulu    时间: 2010-08-16 09:50
简单的写了下,没详细测试,也没加事务,需要的话可以自己包裹~~:wink:

  1. delimiter $
  2. drop procedure if exists group_insert$
  3. create procedure group_insert (in new_s_id varchar(10),in new_o_id varchar(10),in new_num int)
  4. begin
  5.         if (num=1)
  6.         then
  7.                 insert into T1 (`s_id`, `o_id`, `num`) values (new_s_id,new_o_id,new_num);
  8.                 insert into T2 (`s_id`, `o_id`, `1`) values (s_id,o_id,1) on duplicate key update   `1` = `1`+1 ;
  9.         end if;
  10.         if (num=2)
  11.         then
  12.                 insert into T1 (`s_id`, `o_id`, `num`) values (s_id,o_id,num);
  13.                 insert into T2 (`s_id`, `o_id`, `2`) values (s_id,o_id,1) on duplicate key update   `1` = `1`+1 ;
  14.         end if;
  15.         if (num=3)
  16.         then
  17.                 insert into T1 (`s_id`, `o_id`, `num`) values (s_id,o_id,num);
  18.                 insert into T2 (`s_id`, `o_id`, `3`) values (s_id,o_id,1) on duplicate key update   `1` = `1`+1 ;
  19.         end if;
  20. end$
  21. delimiter ;
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2