Скопируйте значение одного столбца в другой столбец разных строк - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно создать выбор, где в столбце second_value значение столбца first_value копируется, когда тип имеет тип 'B'

Другими словами, поместите то же значение в столбец: first_value встолбец second_value только тогда, когда типом является «B».Тип «C» ничего не помещает во второй столбец значений.Пример

id  descripcion   type   first_value    second_value
1   grain          A     1000   
2   beans          B                    1000 (copied from the first_value column)
3   sugar          C     2000

Я пытаюсь что-то подобное, но я не получил желаемый результат

 SELECT id, description, type, firt_value, 
     CASE WHEN type = 'B' THEN first_value end second_value

Возможно ли это сделать?И как бы я это сделал?

Ответы [ 4 ]

0 голосов
/ 31 мая 2018

Вам необходимо добавить условие Else к вашему запросу

SELECT id, description, type,
CASE WHEN type = 'A' THEN first_value
 Else null end as first_value
 CASE WHEN type = 'B' THEN first_value
 Else second_value end as second_value
0 голосов
/ 31 мая 2018
SELECT id, description, type,  
    CASE WHEN type = 'A' THEN first_value ELSE null end first_value,
CASE WHEN type = 'B' THEN first_value ELSE null end second_value 
0 голосов
/ 31 мая 2018

Вам понадобится выражение case с subquery, чтобы получить предыдущую строку:

select *, (case when type = 'B'
                then (select top 1 t1.first_value 
                      from table t1
                      where t1.id < t.id
                      order by t1.id desc
                     ) else first_value
           end) as second_value
from table t; 
0 голосов
/ 31 мая 2018

Я полагаю, вы были почти там.Вам нужен только CASE ... END обнуление first_value, когда тип 'B'.

SELECT id,
       description,
       type,
       CASE
         WHEN type = 'B'
           THEN NULL
         ELSE
           first_value
       END first_value,
       CASE
         WHEN type = 'B'
           THEN first_value
         ELSE
           second_value
       END second_value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...