在块中分配增加的值

时间:2017-10-31 10:05:47

标签: block

我有一张具有以下特征的表格: RecordId-唯一标识符 日期,重量和对照(如果重量,则为1,否则为10000)。

RecordID    Date    Weight  Control
1           16/07/2014  12200   1
2           16/07/2014  0       0
3           16/07/2014  5720    0
4           16/07/2014  11060   1
5           16/07/2014  15940   1
6           16/07/2014  16200   1
7           16/07/2014  16080   1
8           16/07/2014  16080   1
9           16/07/2014  16080   1
10          18/07/2014  16080   1
11          18/07/2014  3720    0
12          18/07/2014  4500    0
13          18/07/2014  23800   1
14          18/07/2014  40700   1
15          18/07/2014  40700   1

我想添加一个新列(Group),为每个0和1组分配相同的增加数字如下:

RecordID    Date    Weight  Control Group
1            16/07/2014 12200   1   1
2            16/07/2014 0       0   2
3            16/07/2014 5720    0   2
4            16/07/2014 11060   1   3
5            16/07/2014 15940   1   3
6            16/07/2014 16200   1   3
7            16/07/2014 16080   1   3
8            16/07/2014 16080   1   3
9            16/07/2014 16080   1   3
10           18/07/2014 16080   1   3
11           18/07/2014 3720    0   4
12           18/07/2014 4500    0   4
13           18/07/2014 23800   1   5
14           18/07/2014 40700   1   5
15           18/07/2014 40700   1   5

请帮我解决这个难题。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用Microsoft Transact SQL。

这是使用CASE WHEN语句识别“控制”列中的更改的解决方案。

我已将表格与原始数据(RecordID,日期,重量和控制)命名为' Flori'在下面的T-SQL中。

SELECT      f.RecordID, f.Date, f.Weight, f.Control, 
            SUM(x.Change) OVER (ORDER BY f.RecordId) + 1 as [Group]
FROM 
            (SELECT RecordID, 
                (SELECT 
                    CASE 
                        WHEN Control != 
                             (SELECT Control FROM Flori WHERE RecordId = f.RecordID - 1)  
                            THEN 1 
                        ELSE 0 
                    END
                ) as Change
            FROM Flori as f) as x
INNER JOIN  Flori f on x.RecordID = f.RecordID
GROUP BY    f.RecordID, f.Date, f.Weight, f.Control, x.Change