Преобразование нескольких строк в несколько столбцов в SQL - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть данные примерно так:

Team    Month   Count_of_Stores
  a      4       10
  b      4        4
  c      4        6
  a      5        8
  b      5       14
  e      5        9
  a      6        7
  b      6        3
  f      6        1

Я работаю, чтобы получить что-то вроде этого, преобразуя строки в столбцы:

Кол-во командных месяцев Count_of_Stores Кол-во командных месяцев Count_of_Stores Кол-во командных месяцев Count_of_Storesa 4 10 a 5 8 a 6 7 b 4 4 b 5 14 b 6 3 c 4 6 e 5 9 f 6 1

Я уверен, что здесь должна быть полезна опорная точка, но она запуталась в правильном использованииВот.любая помощь очень ценится.

1 Ответ

0 голосов
/ 18 сентября 2018

Я предполагаю объединение команды на основании предоставленных данных. Нечто подобное может работать для вас (демо: http://rextester.com/GQHPV34978)

CREATE TABLE temp
(
    [teamID] INT,
    [month] INT,
    [count_of_stores] INT
)

INSERT INTO temp
VALUES 
(1,4,10),
(2,4,4),
(3,4,6),
(1,5,8),
(2,5,14),
(3,5,9),
(1,6,7),
(2,6,3),
(3,6,1)

SELECT [teamID], 
    MAX(CASE WHEN MONTH = 4 THEN MONTH END )AS Month,
    MAX(CASE WHEN MONTH = 4 THEN count_of_stores END )  AS Count_of_Stores,
    MAX(CASE WHEN MONTH = 5 THEN MONTH END )AS Month,
    MAX(CASE WHEN MONTH = 5 THEN count_of_stores END )  AS Count_of_Stores ,
    MAX(CASE WHEN MONTH = 6 THEN MONTH END )AS Month,
    MAX(CASE WHEN MONTH = 6 THEN count_of_stores END )  AS Count_of_Stores 
FROM temp
GROUP BY teamID

Обновление со следующими данными на основе новой информации (демо: http://rextester.com/JIZQX61960)

create TABLE #temp
(
    [teamID] varchar,
    [month] INT,
    [count_of_stores] INT
)

INSERT INTO #temp
VALUES 
('a',4,10),
('b',4,4),
('c',4,6),
('a',5,8),
('b',5,14),
('e',5,9),
('a',6,7),
('b',6,3),
('f',6,1);


WITH monthGrouping AS
(
    SELECT row_number() over (partition by month order by month) as rn, [teamID], [month],[count_of_stores] FROM #temp
)

SELECT 
    MAX(CASE WHEN MONTH = 4 THEN [teamID] END )AS [teamID],
    MAX(CASE WHEN MONTH = 4 THEN MONTH END )AS Month,
    MAX(CASE WHEN MONTH = 4 THEN count_of_stores END )  AS Count_of_Stores,
    MAX(CASE WHEN MONTH = 5 THEN [teamID] END )AS [teamID],
    MAX(CASE WHEN MONTH = 5 THEN MONTH END )AS Month,
    MAX(CASE WHEN MONTH = 5 THEN count_of_stores END )  AS Count_of_Stores ,
    MAX(CASE WHEN MONTH = 6 THEN [teamID] END )AS [teamID],
    MAX(CASE WHEN MONTH = 6 THEN MONTH END )AS Month,
    MAX(CASE WHEN MONTH = 6 THEN count_of_stores END )  AS Count_of_Stores 
FROM monthGrouping
GROUP BY rn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...