группировка по условию с последующим объединением двух столбцов - PullRequest
0 голосов
/ 09 марта 2019

У меня есть следующие столбцы в таблице Продажи:

Category1,priceA,priceB,Category2,costA,costB,type.(some items in category1 are same as category2)

sum(priceA), sum(priceB)

должны быть сгруппированы по категории 1, тип.

sum(costA), sum(costB)

должны быть сгруппированы по категории 2, тип.

Мне нужен конечный результат как

Объединение (категория 1, категория 2) как категория 3, сумма (цена A) + сумма (стоимость A), сумма (цена B) + сумма (стоимость B), тип для группировкиСОЕДИНЕНИЕ (категория1 + категория2), тип.

(сумма (цена A) + сумма (стоимость A) будет происходить всякий раз, когда элементы в категории 1 соответствуют категории 2, и то же самое относится к сумме (цена B) + сумма (стоимость B))

Я пытался сделатьэто на

select category1,sum(priceA),sum(priceB),type group by category1,type
UNION ALL
select category2,sum(costA),sum(costB),type group by category2,type

Затем следите за этим с другой суммой и группируйте по.Но я хочу знать, как это сделать без отдельного выбора и избежания объединения в основном двух таблиц.Могу ли я использовать группу, за которой следует оператор case?На самом деле таблица, которую я назвал продажами, является внутренним объединением нескольких таблиц, поэтому мотивация не использовать select для нее по отдельности в двух случаях (в моем случае это было бы объединение 4 запросов на выборку в таблице, что заставляет запрос выглядеть действительнобольшой тоже).Плюс у меня нет разрешения на создание процедуры, поэтому нет PL / SQL.Есть какой-нибудь причудливый способ для вышеуказанной ситуации, который сократит запрос и улучшит производительность?

РЕДАКТИРОВАТЬ - ОБРАЗЕЦ ДАННЫХ (Категория1, ЦенаA, ЦенаB, Категория2, CostA, CostB, Тип)

+-----+----+----+-----+----+----+---+
| AUS | 20 | 25 | UK  | 35 | 40 | X |
| UK  | 30 | 26 | SA  | 32 | 40 | Y |
| USA | 22 | 24 | NZ  | 38 | 36 | Z |
| BRA | 16 | 10 | USA | 25 | 25 | Z |
| RUS | 20 | 15 | UK  | 20 | 30 | X |
+-----+----+----+-----+----+----+---+

Который я разделил на объединение двух таблиц:

+-----+----+----+---+
| AUS | 20 | 25 | X |
| UK  | 30 | 26 | Y |
| USA | 22 | 24 | Z |
| BRA | 16 | 10 | Z |
| RUS | 20 | 15 | X |
+-----+----+----+---+

И

+-----+----+----+---+
| UK  | 55 | 70 | X |
| SA  | 33 | 40 | Y |
| NZ  | 38 | 36 | Z |
| USA | 25 | 25 | Z |
+-----+----+----+---+

Конечный результат будет выглядеть так:

+-----+----+----+---+
| UK  | 55 | 70 | X |
| UK  | 30 | 26 | Y |
| NZ  | 38 | 36 | Z |
| USA | 47 | 49 | Z |
| AUS | 20 | 25 | X |
| SA  | 32 | 40 | Y |
| BRA | 16 | 10 | Z |
| RUS | 20 | 15 | X |
+-----+----+----+---+

1 Ответ

0 голосов
/ 11 марта 2019

Это даст вам то, что вы хотите. SQLFiddle .

with sample_data1 as (
  select "Category1", "PriceA", "PriceB", "Type"
    from sample_data
  union all
  select "Category2", "CostA", "CostB", "Type"
    from sample_data
)
select "Category1", sum("PriceA"), sum("PriceB")
from sample_data1 sd1
group by "Category1", "Type"

В какой-то момент вам понадобится объединение, поскольку вам нужно увеличить количество строк в исходной исходной таблице.Вы не можете сделать это только с делом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...