从3个相应的列值中设置正确的ID

时间:2014-10-13 14:09:50

标签: sql-server-2008

信息

我有一张桌子:tblTest

Column1 | Column2 | Column3 | Column4
--------+---------+---------+---------
  500   |   80    |    1    |    ?
  300   |   11    |    2    |    ?
  200   |   11    |    3    |    ?
  100   |   80    |    4    |    ?
  100   |   11    |    5    |    ?

如果column2中的数字是80,那么相应的column1数量就是总数。

如果column2中的数字是11,则相应的column1数量等于总数。

如果第2列中有多个11位于80之间,那么相应的第1列的数字必须等于第2列的第2列总数。<\ n / p>

Column3基本上就是ID。

如果Column2的值为80

,则Column4的值将等于ID

与上面列80的总和相等的相应列11必须在Column4中具有相同的ID。

简而言之,输出应如下:

Column1 | Column2 | Column3 | Column4
--------+---------+---------+---------
  500   |   80    |    1    |    1
  300   |   11    |    2    |    1
  200   |   11    |    3    |    1
  100   |   80    |    4    |    4
  100   |   11    |    5    |    4

问题

如何使用SQL在第4列中获取正确的ID?

1 个答案:

答案 0 :(得分:0)

我找到了答案。 首先,我完全省略了金额列,因为可以在以后完成。

DECLARE cursor1 CURSOR FOR
SELECT col1, col2, col3 FROM tbl_BatchUpdate
DECLARE @col1 int
DECLARE @col2 int
DECLARE @col3 int
DECLARE @inputVar int

OPEN cursor1

FETCH NEXT FROM cursor1 INTO @col1, @col2, @col3

WHILE @@FETCH_STATUS = 0
BEGIN
IF (@col1 = 80) 
BEGIN
    SET @col3 = @col2
    SET @inputVar = @col2
    UPDATE tbl_BatchUpdate SET col3 = @inputVar WHERE col2 = @col2
END
ELSE IF (@col1 = 11)
BEGIN
    UPDATE tbl_BatchUpdate SET col3 = @inputVar WHERE col2 = @col2
END

FETCH NEXT FROM cursor1 INTO @col1, @col2, @col3
END

CLOSE cursor1
DEALLOCATE cursor1
GO

我编码它的方式有点奇怪,但它完美地完成了工作。使用一些SUM和COUNTs可以轻松地将金额加在一起。