Поворот над ранговым столом - PullRequest
0 голосов
/ 29 мая 2019

Попытка эффективно преобразовать существующую таблицу со столбцом ранга над разделом в столбец только при наличии ранга 1 и более.Вот мои данные:

   -------------------------------------
   | Id | Value  | Name          | rank|
   -------------------------------------
   | 1  | 1234   | John          |1    |
   | 2  | 3456   | John          |2    |
   | 3  | 9999   | Chris         |1    |
   | 4  | 9801   | Joe           |1    | 
   | 5  | 1287   | Joe           |2    |
   _____________________________________

То, к чему я пытаюсь прийти:

   -------------------------------------
   |       ValA  | ValB     | Name     | 
   -------------------------------------
   | 1  | 1234   | 3456    | John      |
   | 2  | 9801   | 1287    | Joe       |
   -------------------------------------

Пробовал несколько версий pivot, но я чувствую, что что-то упустил.Ключ отбрасывает все строки, где ранжирование только 1, и, если у меня есть 1 и 2, чтобы преобразовать их.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Это то, что вы хотите?

select max(case when rank = 1 then value end) as value_a,
       max(case when rank = 2 then value end) as value_b,
       name
where rank in (1, 2)
group by name
having count(*) = 2;

Если вам также нужен первый столбец, просто добавьте row_number() over (order by (select null)).

0 голосов
/ 29 мая 2019

Вы можете попробовать ниже -

select rank, name, max(case when rank=1 then value end) as valA,
max(case when rank=2 then value end) as valB
from
(
select * from tablename
where rank in (1,2)
group by id, value, name, rank
having count(distinct rank)=2
)X group by rank, name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...