powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как повернуть таблицу
5 сообщений из 5, страница 1 из 1
Как повернуть таблицу
    #39940571
Tenьka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Подскажите пожалуйста как осуществить поворот, чтобы получить из таблицы 1, таблицу 2.
Пробую через PIVOT, остается только по одной строке для каждого магазина вместо двух.

Исходная таблица 1

Магазин Дата Продано
--------------------------------------
Магазин 1 01.02.2001 3
Магазин 1 01.02.2001 4
Магазин 1 02.02.2001 15
Магазин 1 02.02.2001 24
Магазин 2 01.02.2001 11
Магазин 2 01.02.2001 34
Магазин 2 02.02.2001 1
Магазин 2 02.02.2001 5

Нужно получить таблицу 2

Магазин 01.02.2001 02.02.2001
----------------------------------------------
Магазин 1 3 15
Магазин 1 4 24
Магазин 2 11 1
Магазин 2 34 5



CREATE TABLE #m(Shop nvarchar(50),[Date] datetime, Sold int)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 1','01.02.2001',3)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 1','01.02.2001',4)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 1','02.02.2001',15)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 1','02.02.2001',24)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 2','01.02.2001',11)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 2','01.02.2001',34)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 2','02.02.2001',1)
INSERT INTO #m(Shop, [Date], Sold) VALUES('Магазин 2','02.02.2001',5)

SELECT Shop, [01.02.2001], [02.02.2001]
FROM #m
PIVOT
(MIN(Sold) FOR [Date] IN ([01.02.2001], [02.02.2001])) p
...
Рейтинг: 0 / 0
Как повернуть таблицу
    #39940602
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tenьka
Пробую через PIVOT, остается только по одной строке для каждого магазина вместо двух.
Можно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Shop, [01.02.2001], [02.02.2001]
FROM (
	SELECT Shop, [Date], Sold, row_number() over(partition by Shop, [Date] order by Sold) as num
	FROM #m
) t
PIVOT
(MIN(Sold) FOR [Date] IN ([01.02.2001], [02.02.2001])) p
order by Shop



Хотя такое разделение странно, нужно же, что бы в строках поля Shop, [Date] были дополнены каким то атрибутом, делающим этот набор уникальным (например, утренние или вечерние продажи, или что то такое)
...
Рейтинг: 0 / 0
Как повернуть таблицу
    #39940624
Tenьka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Спасибо большое!

А если делать реализацию через групповые операции:

SELECT Shop,
MIN(CASE [Date] WHEN '01.02.2001' THEN Sold ELSE NULL END) '01.02.2001',
MIN(CASE [Date] WHEN '02.02.2001' THEN Sold ELSE NULL END) '02.02.2001'
FROM #m
GROUP BY Shop

этот запрос так же возвращает только по 1 строке

возможно ли получить данные при группировке в виде таблицы 2?
...
Рейтинг: 0 / 0
Как повернуть таблицу
    #39940628
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tenьka
А если делать реализацию через групповые операции:

этот запрос так же возвращает только по 1 строке

возможно ли получить данные при группировке в виде таблицы 2?
Да, таким же способом.
...
Рейтинг: 0 / 0
Как повернуть таблицу
    #39940633
Tenьka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Спасибо Вам еще раз большое!

Получилось вот так:


SELECT t.Shop,
MIN(CASE [Date] WHEN '01.02.2001' THEN Sold ELSE NULL END) '01.02.2001',
MIN(CASE [Date] WHEN '02.02.2001' THEN Sold ELSE NULL END) '02.02.2001'
FROM (
SELECT Shop, [Date], Sold, row_number() over(partition by Shop, [Date] order by Sold) as num
FROM #m
) t
GROUP BY t.Shop, num
ORDER BY Shop
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как повернуть таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]