Этот вопрос касается SQL Azure. У меня есть набор данных для различных цен на сырьевые товары по годам и цена за единицу, например:
Рис - 2007 - 0,5
Рис - 2007 - 0,3
Рис - 2007 - 0,8
Пшеница - 2006 - 1,1
Пшеница - 2006 - 1,4
так далее
Как я могу создать сводную таблицу, которая дает мне максимальную и минимальную цену, уплачиваемую за каждый год для каждого товара? Я знаю, как создать сводную таблицу, которая дала бы мне что-то вроде среднего - это довольно просто. Но мне нужно, чтобы в моем «основном» сводном столбце был год, а затем каждый год имел бы свои 2 «подстолбца» для МИН и МАКС цены, и я не совсем уверен, как это сделать. Помощь!
1 ответ
Если я чего-то не упустил в вашем объяснении, вы можете легко сделать это без функции PIVOT:
select product,
year,
min(price) MinPrice,
max(price) MaxPrice
from yourtable
group by product, year
См. SQL Fiddle с демонстрацией.
Если вам нужны данные в отдельных столбцах, это можно сделать несколькими способами.
Агрегатная функция с CASE:
select product,
min(case when year=2006 then price else 0 end) [2006_MinPrice],
max(case when year=2006 then price else 0 end) [2006_MaxPrice],
min(case when year=2007 then price else 0 end) [2007_MinPrice],
max(case when year=2007 then price else 0 end) [2007_MaxPrice]
from yourtable
group by product
См. SQL Fiddle с демонстрацией
UNPIVOT и PIVOT:
UNPIVOT используется для преобразования данных столбца в строки. Оказавшись в строках, вы можете создать новые столбцы с годом, а затем повернуть их:
select *
from
(
select product,
cast(year as varchar(4))+'_'+col as piv_col,
value
from
(
select product,
year,
min(price) MinPrice,
max(price) MaxPrice
from yourtable
group by product, year
) x
unpivot
(
value for col in (minPrice, maxPrice)
) u
) d
pivot
(
max(value)
for piv_col in ([2006_MinPrice], [2006_MaxPrice],
[2007_MinPrice], [2007_MaxPrice])
) piv;
См. SQL Fiddle с демонстрацией. Это дает результат:
| PRODUCT | 2006_MINPRICE | 2006_MAXPRICE | 2007_MINPRICE | 2007_MAXPRICE |
---------------------------------------------------------------------------
| Rice | 0 | 0 | 0.3 | 0.8 |
| Wheat | 1.1 | 1.4 | 0 | 0 |
Если у вас неизвестное количество лет, вы также можете реализовать динамический sql.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.