Как я могу суммировать / сводить данные с oracle sql - PullRequest
1 голос
/ 28 февраля 2020

У меня есть таблица, содержащая информацию о геологических ресурсах.

| Property | Zone | Area        | Category  | Tonnage | Au_gt | Au_oz |
|----------|------|-------------|-----------|---------|-------|-------|
| Ket      | Eel  | Open Pit    | Measured  | 43400   | 5.52  | 7700  |
| Ket      | Eel  | Open Pit    | Inferred  | 51400   | 5.88  | 9700  |
| Ket      | Eel  | Open Pit    | Indicated | 357300  | 6.41  | 73600 |
| Ket      | Eel  | Underground | Measured  | 3300    | 7.16  | 800   |
| Ket      | Eel  | Underground | Inferred  | 14700   | 6.16  | 2900  |
| Ket      | Eel  | Underground | Indicated | 168100  | 8.85  | 47800 |

Я хотел бы обобщить данные, чтобы наши клиенты могли легче их прочитать.

| Property | Zone | Category  | Open_Pit_Tonnage | Open_Pit_Au_gt | Open_Pit_Au_oz | Underground_tonnage | Underground_au_gt | Underground_au_oz | Combined_tonnage | Combined_au_gt | Combined_au_oz |
|----------|------|-----------|------------------|----------------|----------------|---------------------|-------------------|-------------------|------------------|----------------|----------------|
| Ket      | Eel  | Measured  | 43,400           | 5.52           | 7,700          | 3,300               | 7.16              | 800               | 46,700           | 5.64           | 8,500          |
| Ket      | Eel  | Indicated | 357,300          | 6.41           | 73,600         | 168,100             | 8.85              | 47,800            | 525,400          | 7.19           | 121,400        |
| Ket      | Eel  | Inferred  | 51,400           | 5.88           | 9,700          | 14,700              | 6.16              | 2,900             | 66,100           | 5.94           | 12,600         |

I Я довольно новичок в сводных таблицах. Как я могу написать запрос для перевода и обобщения данных?

Спасибо!

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Если ваша Oracle версия 11.1 или выше (что должно быть, если вы относительно новый пользователь!), Тогда вы можете использовать оператор PIVOT, как показано ниже.

Обратите внимание, что результат операции PIVOT может иметь псевдоним (я использовал p) - это облегчает написание предложения SELECT.

Я предположил, что имя вашей таблицы geological_data - замените его фактическим именем таблицы.

select p.*
     , open_pit_tonnage + underground_tonnage as combined_tonnage
     , open_pit_au_gt   + underground_au_gt   as combined_au_gt
     , open_pit_au_oz   + underground_au_oz   as combined_au_oz
from   geological_data
pivot  (sum(tonnage) as tonnage, sum(au_gt) as au_gt, sum(au_oz) as au_oz
        for area in ('Open Pit' as open_pit, 'Underground' as underground)) p
;
1 голос
/ 28 февраля 2020

Условное агрегирование - это простой метод:

select Property, Zone, Category,
       max(case when area = 'Open Pit' then tonnage end) as open_pit_tonnage,
       max(case when area = 'Open Pit' then Au_gt end) as open_pit_Au_gt,
       max(case when area = 'Open Pit' then Au_oz end) as open_pit_Au_ox,
       max(case when area = 'Underground' then tonnage end) as Underground_tonnage,
       max(case when area = 'Underground' then Au_gt end) as Underground_Au_gt,
       max(case when area = 'Underground' then Au_oz end) as Underground_Au_ox
from t
group by Property, Zone, Category
0 голосов
/ 28 февраля 2020

SQL Оператор сервера PIVOT используется для преобразования строк в столбцы.

Цель - преобразовать имена категорий из первого столбца выходных данных в несколько столбцов и подсчитать количество продуктов для каждой категории

enter image description here

Эта ссылка на запрос может быть учтена для вас выше таблицы:

SELECT * FROM   
(
    SELECT 
        category_name, 
        product_id,
        model_year
    FROM 
        production.products p
        INNER JOIN production.categories c 
            ON c.category_id = p.category_id
) t 
PIVOT(
    COUNT(product_id) 
    FOR category_name IN (
        [Children Bicycles], 
        [Comfort Bicycles], 
        [Cruisers Bicycles], 
        [Cyclocross Bicycles], 
        [Electric Bikes], 
        [Mountain Bikes], 
        [Road Bikes])
) AS pivot_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...