Объединение двух таблиц в запросе и создание новых столбцов из этого - PullRequest
0 голосов
/ 18 февраля 2012

У меня возникли проблемы с запросом, которые я НЕ ПОЛНОСТЬЮ уверен, что это можно сделать при настройке базы данных.В основном, я буду использовать две разные таблицы в своем запросе, скажем, Транзакции и Цены на билеты.Они выглядят так (с некоторыми примерами данных):

    TRANSACTIONS
  Transation ID | Ticket Quantity | Total Price | Salesperson | Ticket Price ID
       5489              250            250            Jim               8765
       5465              50             150            Jim               1258  
       7898              36             45             Ann               4774


     Ticket Prices
   Ticket Price ID | Quantity | Price | Bundle Name
        8765           1          1         1 ticket, $1   
        4774           12         15        5 tickets, $10
        1258           1          3         1 ticket, $3

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

 Sales Volume/Salesperson
 Name | Bundle A | Bundle B | Bundle C | Total
 Jim     250         0           50      300
 Ann     0           36          0        36

Я искал в Интернете, и, кажется, лучший способ получить это - использовать различные подзапросы, которые хорошо работают, даже еслизаголовки столбцов отображаются правильно, но это не работает, насколько фактические числовые итоги.Он в основном объединяет данные, давая каждому продавцу общее считывание (в этом примере у Джима и Энн было бы 250 продаж в Пакете А, 36 в Пакете В и т. Д.).Можно ли как-нибудь написать запрос, который даст мне правильные результаты?Или даже что-то хотя бы близко к этому?Спасибо за любой вклад.

1 Ответ

0 голосов
/ 18 февраля 2012

Для этого вы можете использовать оператор PIVOT в Oracle.Запрос может выглядеть примерно так:

WITH pivot_data AS (
          SELECT t.salesperson,p.bundle_name,t.ticket_quantity 
          FROM   ticket_prices p, transactions t
          where t.ticket_price_id = p.ticket_price_id
          )
  SELECT *
  FROM   pivot_data
  PIVOT (
             sum(ticket_quantity)        --<-- pivot_clause
         FOR bundle_name          --<-- pivot_for_clause
      IN  ('1 ticket, $1','5 tickets, $10', '1 ticket, $3' )   --<-- pivot_in_clause
        );

, что даст вам такие результаты:

enter image description here

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