Как произвести выборку данных из строк в столбцы?
Здравуствуйте! Необходимо разбить данные на два столбца имеющих свои данные.
Имеется такая таблица:

А нужно получить вот такую:
Ломаю голову уже 5 час. Идея пришла только с тем, что необходимо использовать ntile. Чтобы вывести по группно. Но все без результатно.
select min(id), max(id)
from (
select id, row_number() over(partition by ntl order by id) grp
from (
select id, ntile(2) over(order by id) ntl
from sales
)
)
group by grp
Ответы (3 шт):
Автор решения: RottenRat
→ Ссылка
Судя по тому, что вы описали, вы хотите это
SELECT s.FullName, min(s.Sum), max(s.Sum)
FROM sales s
GROUP by s.FullName
Автор решения: rotabor
→ Ссылка
Или так:
SELECT id,FullName,
SUM(CASE
WHEN SaleData = 2023 THEN Sum ELSE 0 END
) AS '2023',
SUM(CASE
WHEN SaleData = 2024 THEN Sum ELSE 0 END
) AS '2024'
FROM sales
GROUP BY FullName;
Но как-то MySQL бледно выглядит без итоговых таблиц, потому что в других СУБД можно написать так:
TRANSFORM Sum(Table1.[Sum]) AS TotalSum
SELECT Table1.[FullName]
FROM Table1
GROUP BY Table1.[FullName]
PIVOT Table1.[SaleData];
Автор решения: ValNik
→ Ссылка
Можно и итоги с помощью ROLLUP
select coalesce(FullName,'total') personName
,sum(case when SaleData=2022 then SalesSum else 0 end) sale22
,sum(case when SaleData=2023 then SalesSum else 0 end) sale23
from sales
group by FullName
with ROLLUP
| personName | sale22 | sale23 |
|---|---|---|
| SalesPerson1 | 1000.0999755859375 | 1002.0999755859375 |
| SalesPerson2 | 0 | 1003.0999755859375 |
| SalesPerson3 | 1004.0999755859375 | 0 |
| total | 2004.199951171875 | 2005.199951171875 |
