Попытка эффективно преобразовать существующую таблицу с рангом над столбцом раздела в столбец только при наличии ранга 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, чтобы преобразовать их.
Хорошо, если вы предоставите нам то, что вы пытались, и неверный результат, который вы получили. Это может помочь нам лучше помочь вам :)
Вы можете попробовать ниже -
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
Это то, что вы хотите?
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))
.
Опубликуйте свой запрос, который вы использовали для получения первого вывода таблицы. Это поможет.