对于相同的值,它应该递增1并且不同它应该被重置并给出结果

时间:2014-07-22 09:56:52

标签: mysql sql

我有一个这样的表,并希望添加一列,以便对于相同的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

4 个答案:

答案 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小提琴: -

http://www.sqlfiddle.com/#!2/79bfb/2

答案 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;