SQL ORACLE UNPIVOT - PullRequest
       12

SQL ORACLE UNPIVOT

0 голосов
/ 31 марта 2020

Я не могу справиться с этим unpivot

select *
    from (select c.country_id, r.region_id, count(*) liczba
    from countries c join regions r on r.region_id = c.region_id
    group by c.country_id, r.region_id)
    UnPivot(
         count(liczba) for r.region_id in (any))
         order by c.country_id

это код, и он все равно не будет работать :(

select r.region_name, count(*)
from countries c join regions r on r.region_id = c.region_id
group by r.region_name

этот работает правильно. введите описание изображения здесь

«неверный идентификатор»

введите описание изображения здесь

Второе воображение!

1 Ответ

2 голосов
/ 31 марта 2020

Ваш запрос не имеет смысла, так как:

  • UNPIVOT используется для преобразования столбцов в строки; у вас есть только 3 столбца country_id, region_id и liczba.
  • Синтаксис UNPIVOT:

    UNPIVOT ( value FOR key IN ( column1 AS 'alias1', column2 AS 'alias2' ) )
    

    Вы не можете использовать выражение агрегации в качестве значение.

  • Вам необходимо указать, какие столбцы вы UNPIVOT выводите в строки; вы не можете использовать any, если вы не определили столбец с именем any.

Похоже, вы хотите использовать PIVOT вместо UNPIVOT.


Хотелось бы посмотреть, сколько человек работает на каждом job_id

Использование GROUP BY и COUNT:

SELECT job_id,
       COUNT(DISTINCT EMPLOYEE_ID) AS number_of_employees
FROM   employees
GROUP BY job_id

с использованием unpivot

Это не то, для чего UNPIVOT; UNPIVOT преобразует столбцы в строки, в то время как вы хотите объединять строки вместе.

...