信息
我有一张桌子: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?
答案 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可以轻松地将金额加在一起。