SQL Server - объединяйте дублирующиеся и перекрестные строки подряд с суммированием - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть таблица SQL, в ней 250000+ строк и 3 столбца.Моя таблица выглядит так:

      Column 1     Column 2     Column 3
   ----------------------------------------
       Honda        Civic         500
       Civic        Honda         250
       Alfa         Romeo         1650000
       Alfa         Romeo         150000
       Renault      Broadway      10
       Aston        Martin        750
       Renault      Megane        2000
       Megane       Renault       150
       Ferrari      Enzo          88500
       Ferrari      Enzo          500
       Renault      Megane        30000

Я хочу сделать это, когда я компилирую свой код в SQL, моя таблица должна выглядеть так:

      Column 1     Column 2     Column 3
   ---------------------------------------
       Honda        Civic         750
       Alfa         Romeo         1800000
       Renault      Broadway      10
       Aston        Martin        750
       Renault      Megane        32150
       Ferrari      Enzo          89000

Примечание: яне парень по SQL, так что я не смог бы придумать, извините.

1 Ответ

0 голосов
/ 20 февраля 2019

Это сложный вопрос.Я предполагаю, что при наличии пары вы хотите сохранить порядок пары с более высокой суммой:

with cc as (
       select column1, column2, sum(column3) as sum_column3
       from t
       group by column1, column2
      )
select (case when cc2.sum_column3 > cc.sum_column3 then cc2.column1 else cc.column1 end) as column1,
       (case when cc2.sum_column3 > cc.sum_column3 then cc2.column2 else cc.column2 end) as column2,
       (cc.sum_column3 + coalesce(cc2.sum_column3, 0)) as sum_column3
from cc left join
     cc cc2
     on cc.column1 = cc2.column2 and cc.column2 = cc2.column
where cc2.column1 is null or (cc.column1 < cc.column2);  -- keep only one row of pairs

Итак, этот запрос начинается с суммирования данных.Затем он проверяет, есть ли в данных «обратный» ряд.Если это так, он выбирает столбцы на основе более распространенного порядка.

...