Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как повернуть таблицу / 5 сообщений из 5, страница 1 из 1
24.03.2020, 14:39
    #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
24.03.2020, 15:26
    #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
24.03.2020, 16:04
    #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
24.03.2020, 16:07
    #39940628
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как повернуть таблицу
Tenьka
А если делать реализацию через групповые операции:

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

возможно ли получить данные при группировке в виде таблицы 2?
Да, таким же способом.
...
Рейтинг: 0 / 0
24.03.2020, 16:14
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как повернуть таблицу / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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