2013-02-26 37 views
0

我有一个表名为类如何更新列的每个数据?

|Record_No [PK] | Student_No | Class_No | Seat_No | 
===================================================== 
|1    | 200910  | 2   | 20  | 
|2    | 2| 2   | 13  | 
|3    | 200965  | 2   | 1  | 
|4    | 200920  | 2   | 8  | 
|5    | 200911  | 2   | 9  | 
|6    | 200955  | 1   | 10  | 
|7    | 200924  | 1   | 9  | 
|8    | 200922  | 1   | 1  | 
|9    | 200901  | 2   | 11  | 
|10    | 200902  | 2   | 18  | 

是否有可能更新Seat_No的数字从1级多达座位的最后一算没有其类不等于2?

表应该是这样的:

|Record_No [PK] | Student_No | Class_No | Seat_No | 
===================================================== 
|1    | 200910  | 2   | 1  | 
|2    | 2| 2   | 2  | 
|3    | 200965  | 2   | 3  | 
|4    | 200920  | 2   | 4  | 
|5    | 200911  | 2   | 5  | 
|6    | 200955  | 1   | 10  | 
|7    | 200924  | 1   | 9  | 
|8    | 200922  | 1   | 1  | 
|9    | 200901  | 2   | 6  | 
|10    | 200902  | 2   | 7  | 

截至目前,我只能通过

UPDATE class SET Seat_No = 1 WHERE Class_No = 2 AND Student_No = 200910; 
UPDATE class SET Seat_No = 2 WHERE Class_No = 2 AND Student_No = 2; 
... 

等实现这个..

我怎样才能解决这个没有把每个student_no放在查询中?请帮助。

+1

您使用MySQL或Postgres的? – Lamak 2013-02-26 17:02:06

+0

我使用Postgres .. – oyan11 2013-02-26 17:09:53

回答

1

假设你Record_No是你的榜样1-5,您可以使用它:

UPDATE class SET Seat_No = Record_No WHERE Class_No = 2 

如果不是,它取决于你的RDBMS。

这里是PostgreSQL的做法:

UPDATE Class C 
SET  Seat_No = t.rn 
FROM (
     SELECT Record_No, ROW_NUMBER() OVER (ORDER BY Record_No) rn 
     FROM Class 
     WHERE Class_no = 2 
     ) t 
WHERE C.Record_No = t.Record_No 

SQL Fiddle Demo

+0

谢谢你的答案..我编辑我的问题的澄清.. – oyan11 2013-02-26 17:20:38

+0

@ oyan11 - 尝试上面的小提琴演示 - 它应该与您的编辑。 Record_No只是一个“快速方法” - 根据您的需要使用其他查询。祝你好运。 – sgeddes 2013-02-26 17:23:03

2
update class 
set seat_no = s.rn 
from (
    select 
     row_number() over(order by record_no) rn, 
     record_no 
    from class 
    where class_no = 2 
) s 
where class.record_no = s.record_no 

如果要更新所有类:

update class 
set seat_no = s.rn 
from (
    select 
     row_number() over(partition by class_no order by record_no) rn, 
     record_no 
    from class 
) s 
where class.record_no = s.record_no 
+0

谢谢,但有没有另一种方法来解决我的问题,而不使用record_no?等等,我会编辑我的表格以进行澄清。 – oyan11 2013-02-26 17:16:55

+0

@ oyan11您的编辑在解决方案中没有任何区别。你试过了吗? – 2013-02-26 17:21:11

+0

谢谢!它的工作,我很抱歉,我很困惑。 – oyan11 2013-02-26 17:31:18

相关问题