我有一个这样的表,并希望添加一列,以便对于相同的bpin,它应该增加1,对于不同的它应该重置并再次从1开始。
BPIN Name
101 A
101 B
101 C
102 D
102 E
103 F
103 G
103 H
103 I
104 K
需要OutPut,如: -
BPIN Name Value
101 A 1
101 B 2
101 C 3
102 D 1
102 E 2
103 F 1
103 G 2
103 H 3
103 I 4
104 K 1
答案 0 :(得分:1)
下面的内容将起作用
set @no:=0;
set @BPIN:='';
select BPIN,Name,@no:=case when @BPIN=BPIN then @no+1 else 1 end , @BPIN=BPIN
from table;
答案 1 :(得分:0)
你必须用序列写一个触发器。 但我认为没有必要。
首先添加pk。每个表应该有一个主键。
您的表格可能如下:
create table YourTable(
id serial,
bpin varchar(3),
name varchar(1)
);
答案 2 :(得分:0)
使用变量进行计数。第一个子查询在添加计数器的处理之前强制执行订单。第二个子查询初始化变量。
SELECT BPIN, Name, @value:=IF(@bpin=BPIN, @value + 1, 1) AS value, @bpin:=BPIN
FROM
(
SELECT BPIN, Name
FROM some_table
ORDER BY BPIN, Name
) sub0
CROSS JOIN (SELECT @value:=0, @bpin:=0) sub1
SQL小提琴: -
答案 3 :(得分:0)
......或者更慢但更简单...
SELECT x.*
, COUNT(*) value
FROM my_table x
JOIN my_table y
ON y.bpin = x.bpin
AND y.name <= x.name
GROUP
BY x.bpin
, x.name;