Сводная каскадная строка - PullRequest
       2

Сводная каскадная строка

0 голосов
/ 15 октября 2019

Моя таблица ввода -

+--------+----------+----------+-------+
| userid | teamname |  task1   | task2 |
+--------+----------+----------+-------+
|    101 | T1       | 101task1 | desc1 |
|    101 | T1       | 101task2 | desc2 |
|    101 | T2       | 101task1 | desc3 |
|    101 | T2       | 101task2 | desc4 |
|    101 | T2       | 101task2 | desc5 |
|    102 | T3       | 102task1 | desc6 |
|    102 | T3       | 102task2 | desc7 |
|    102 | T3       | 102task3 | desc8 |
|    102 | T3       | 102task4 | desc9 |
+--------+----------+----------+-------+

Я хочу, чтобы вывод был следующим, чтобы развернуть (динамическую) задачу 1 + задача 2

+--------+----------+----------------+----------------+----------------+----------------+
| userid | teamname |       1        |       2        |       3        |       4        |
+--------+----------+----------------+----------------+----------------+----------------+
|    101 | T1       | 101task1 desc1 | 101task2 desc2 |                |                |
|    101 | T2       | 101task1 desc3 | 101task2 desc4 | 101task2 desc5 |                |
|    102 | T3       | 102task1 desc6 | 102task2 desc7 | 102task3 desc8 | 102task4 desc9 |
+--------+----------+----------------+----------------+----------------+----------------+

Я попытался повернуть задачу 1, и она работала как примеркод SampleCode ,

, но когда я поворачиваюсь max(task1+task2), я получаю ошибку

1 Ответ

1 голос
/ 15 октября 2019

Вам необходимо объединить их в источнике сводной таблицы и использовать их, задав им псевдоним.

set @query = 'SELECT userid,teamname,' + @cols + ' from 
         (
         select userid,
                teamname,
                concat(task1,task2) as col, --Combine here
                ROW_NUMBER() OVER(PARTITION BY userid,teamname order by task1 asc) AS Row#
            from #yt
        ) x
        pivot 
        (
            max(col)  --Alias used here
            for row# in (' + @cols + ')
        ) p '

execute(@query);

Редактировать: Добавить пробел между полями

set @query = 'SELECT userid,teamname,' + @cols + ' from 
         (
         select userid,
                teamname,
                CONCAT(task1,SPACE(1),task2) col,
                ROW_NUMBER()OVER(PARTITION BY userid,teamname order by task1 asc) AS Row#
            from #yt
        ) x
        pivot 
        (
            max(col)
            for row# in (' + @cols + ')
        ) p '

execute(@query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...