2014-10-13 2 views
0

ИНФОРМАЦИЯУстановка правильный идентификатор из 3 столбцов соответствующих значений

У меня есть таблица: tblTest

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

если число в Столбец2 составляет 80, то соответствующее количество столбец1 это общее.

если число в столбце2 равно 11, то соответствующая сумма столбца равна сумме.

Если в колонке 2 находится более одного элемента 11, то соответствующие номера столбца 1 должны равняться сумме общего количества столбцов 82, находящихся выше.

Column3 - это в основном идентификатор.

значение column4 будет равняться ID, если значение Столбец2 составляет 80

Соответствующие столбцы 11, что равно общему столбцов 80 выше, должны иметь один и тот же идентификатор в column4.

Короче говоря, на выходе должно быть следующим:

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, чтобы получить правильный идентификатор в column4?

+0

Вы сказали, что должно произойти, когда все будет соответствовать вашему примеру. Что должно произойти, если, например, строки '11', которые следуют за определенной строкой' 80' *, не совпадают с суммой в этой строке '80'? Кроме того, в вашем описании «особые случаи» ситуация с одной строкой '11', которая следует за строкой' 80', но действительно ли вам нужно вызывать этот специальный случай? Если вы суммируете всю (одну) строку '11' в этом случае, она все равно должна соответствовать сумме' 80', правильно? –

+0

Те, которые не добавляются, будут обработаны позже. Можно с уверенностью предположить, что они будут складываться на данный момент. –

+0

Чтобы ответить на ваш вопрос об одиночных 11, да, вы правы. –

ответ

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 и COUNT.

Смежные вопросы