NULL поля с использованием PIVOT - PullRequest
2 голосов
/ 04 июля 2019

Я запрашиваю ваше сотрудничество, потому что pivot для таблицы и разделяя записи на null, но все равно оставьте поля в 0 с NVL

Таблица

product   | value
----------+-------
Shirts    | 1200
Caps      | 0
Stocks    | 0
Glasses   | 100
Shoes     | 0

Código pivot

select * from products
 PIVOT (sum(value)
   for titles in ('product', 'value')) AS pivot_product

Результат:

 product  |  Shirts   |  Caps  |    Stocks   | Glasses | Shoes
 ---------+-----------+--------+-------------+---------+----------
   value  |    NULL   |  NULL  |    NULL     |   100   |   NULL
   value  |    1200   |  NULL  |    NULL     |   NULL  |   NULL

Ожидаемый результат:

 product  |  Shirts   |  Caps  |    Stocks   | Glasses | Shoes
 ---------+-----------+--------+-------------+-------+----------
   valor  |    1200   |  NULL  |    NULL     |  100  |   NULL

Необязательно

 product  |  Shirts   |  Caps  |    Stocks   | Glasses | Shoes
 ---------+-----------+--------+-------------+-------+----------
   valor  |    1200   |    0   |      0      |  100  |    0

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

Просто используйте условную агрегацию.Это более гибко:

select 'valor' as product,
       sum(case when product = 'Shirts' then value end) as shirts,
       sum(case when product = 'Caps' then value end) as caps,
       sum(case when product = 'Stocks' then value end) as stockes,
       sum(case when product = 'Shirts' then value end) as shirts,
       sum(case when product = 'Glasses' then value end) as glasses,
       sum(case when product = 'Shoes' then value end) as shoes
from test_data;
2 голосов
/ 04 июля 2019

Вам необходимо поместить значения столбцов в сводный список:

Установка Oracle :

CREATE TABLE test_data ( product, value ) AS
SELECT 'Shirts', 1200 FROM DUAL UNION ALL
SELECT 'Caps',      0 FROM DUAL UNION ALL
SELECT 'Stocks',    0 FROM DUAL UNION ALL
SELECT 'Glasses', 100 FROM DUAL UNION ALL
SELECT 'Shoes',     0 FROM DUAL

Запрос :

SELECT 'value' AS product,
       p.*
FROM   test_data
PIVOT ( SUM( value ) FOR product IN (
  'Shirts'  AS Shirts,
  'Caps'    AS Caps,
  'Stocks'  AS Stocks,
  'Glasses' AS Glasses,
  'Shoes'   AS Shoes
) ) p

Выход :

PRODUCT | SHIRTS | CAPS | STOCKS | GLASSES | SHOES
:------ | -----: | ---: | -----: | ------: | ----:
value   |   1200 |    0 |      0 |     100 |     0

дБ <> скрипка здесь

...