MSSQL Отображение вертикальных данных в столбцах - PullRequest
0 голосов
/ 27 сентября 2018

Хорошо, люди, я наполовину решил свою проблему, и я считаю, что мне нужна помощь в решении другой половины.Мне удалось собрать несколько строк данных из одного столбца (TEAMS) и объединить их в один столбец, однако, похоже, мне нужно сделать то же самое с другим столбцом в том же наборе данных.

Воттекущий пример набора данных:

FIRST | LAST      | YEAR  | ID  | TEAMS
-- -- -- -- -- -- -- -- -- -- -- -- -- 
Chris | Anderson  | 2015  | 176 | 05 White (B)
Chris | Anderson  | 2016  | 176 | 05 Royal (B)
Chris | Anderson  | 2017  | 176 | 05 Royal (B), '08 Gray (B)
Chris | Anderson  | 2018  | 176 | 05 Royal (B), 08 (B)

Мне нужно иметь значение VALUE года в качестве имени столбца и данные команд в качестве VALUE, например:

FIRST | LAST     | 2015         | 2016         | 2017
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
Chris | Anderson | 05 White (B) | 05 Royal (B) | 05 Royal (B), '08 Gray (B)

Вотмой существующий оператор SQL, который создает текущий (первый) набор данных.

SELECT DISTINCT TOP 100 PERCENT dbo.Coaches.FirstName, dbo.Coaches.LastName, dbo.Teams.clubYear, dbo.Coaches.CoachID,
STUFF ((   SELECT  ', '+ SUBSTRING(TeamName,14,len(TeamName)) + ' ('+LEFT(gender,1)+')'
         FROM     dbo.Teams ST
         WHERE    ST.CoachID = dbo.Coaches.CoachID AND ST.clubYear = dbo.Teams.clubYear
         ORDER BY clubYear, CoachID
         FOR XML PATH('')), 1, 1, '') AS Teams FROM    dbo.Coaches INNER JOIN
    dbo.Teams  ON dbo.Coaches.CoachID = dbo.Teams.CoachID
WHERE   dbo.teams.teamTypeID = 3
GROUP BY dbo.Coaches.FirstName, dbo.Coaches.LastName, dbo.Teams.clubYear, dbo.Teams.TeamName, dbo.Coaches.CoachID
ORDER BY dbo.Coaches.LastName, dbo.Coaches.FirstName, dbo.Teams.clubYear

1 Ответ

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

Если пример текущего набора данных является результатом вашего утверждения, это должно быть довольно просто.Я макет вашего запроса, создав аналогичный набор данных в объявленной табличной переменной.Просто замените SELECT * FROM @tbl на ваше утверждение.

DECLARE @tbl TABLE ([FIRST] VARCHAR(100),[YEAR] INT,TEAMS VARCHAR(100));
INSERT INTO @tbl VALUES
 ('Chris',2015,'White (B)')
,('Chris',2016,'05 Royal (B)')
,('Chris',2017,'05 Royal (B), 08 Gray (B)');

- запрос будет использовать ваш набор данных и отправит его в PIVOT

SELECT p.*
FROM
(
    SELECT * FROM @tbl
) t
PIVOT
(
    MAX(TEAMS) FOR [YEAR] IN([2015],[2016],[2017])
) p;

результат

FIRST   2015        2016            2017
Chris   White (B)   05 Royal (B)    05 Royal (B), 08 Gray (B)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...