Вычтите 2 строки, используя инструкцию case в SQL Server 2008 - PullRequest
0 голосов
/ 25 апреля 2018

Мои данные, как показано ниже, в одной таблице

Column1   Column2
abc       100
abc       200

Теперь мне нужно, как показано ниже

abc 100 //here 200-100

Я бьюсь головой о том, как этого добиться.

Я попытался использовать row_number, а затем вычесть с помощью оператора case, как

Select
  column1,
  sum(
    case when rownum=1
    then column2
    end
    -
    case when rownum=2
    then column2
    end
  )
from table
group by column1

Но это дает мне ноль.

Ответы [ 4 ]

0 голосов
/ 25 апреля 2018

Вот краткая форма ответа выше, если вам небезразлично:

SELECT
    column1,
    SUM(IIF(rownum=1,column2,-column2))
FROM table
GROUP BY column1
0 голосов
/ 25 апреля 2018

Предполагая, что у вас есть атрибут rownum в table, который всегда равен 1 или 2 (он может быть сгенерирован некоторым row_number (), как вы предлагаете, в соответствии с любым подходящим для вас порядком)

Column1   Column2  Rownum
------------------------ 
abc       100      1
abc       200      2

тогда вы можете просто использовать

Select
    column1,
    sum(
        case when rownum=1
        then column2
        else -column2
        end
    )
from table
group by column1

Выполняется сумма Column2 за Column1, однако в строке, имеющей rownum = 2, значение Column2 отрицается. Поэтому в нашем примере вы получите 100 + (-200) = -100

0 голосов
/ 25 апреля 2018

Предполагается, что нет атрибута, который может определять порядок строк -

;with cte as(
    select
        row_number() over (order by (select null)) as IndexId,
        Column1,
        Column2
    from @xyz
)
select sum(case when IndexID=1 then (-1 * Column2) else Column2 end), Column1
from cte
group by Column1

Входные данные-

declare @xyz table(Column1   varchar(10),Column2 int)
insert into @xyz
select 'abc'       ,100 union all
select 'abc'       ,200
0 голосов
/ 25 апреля 2018

Вы можете сделать:

select column1, max(column2) - min(column2)
from t
group by column1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...