Как транспонировать столбцы в операторе выбора SQL - PullRequest
0 голосов
/ 07 октября 2019

У меня есть таблица с именем Ingresos_Ppto с таким определением:

ID         int       PK
IdCliente  int       
FechaPpto  Datetime
Rubro      varchar(max)
Valor      numer(18,0)

Когда я запускаю оператор выбора для IdCliente = 1, я получаю такой результат:

SELECT
    *
FROM 
    [dbo].[Ingresos_Ppto] [Y]
WHERE
    ([Y].[IdCliente] = @idc)

Вывод:

ID| IdCliente | FechaPpto  | Rubro                      |   Valor
+-+-----------+------------+----------------------------+--------------
1 | 1         | 2019-01-01 | Portal web WP              |   9148489.00
2 | 1         | 2019-01-01 | Portal web WP + ecommerce  |   3785304.00
3 | 1         | 2019-01-01 | Renting tecnológico        |   7223406.00
4 | 1         | 2019-01-01 | Branding                   |   3280937.00
5 | 1         | 2019-01-01 | Mercadeo y publicidad      |   3372619.00
6 | 1         | 2019-02-01 | Portal web WP              |   9172295.00
7 | 1         | 2019-02-01 | Portal web WP + ecommerce  |   9140700.00
8 | 1         | 2019-02-01 | Renting tecnológico        |   7298693.00
9 | 1         | 2019-02-01 | Branding                   |   4912017.00

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

Rubro                      | 2019-01      | 2019-02    
+--------------------------+--------------+-------------
Portal web WP              | 9148489.00   | 9172295.00 
Portal web WP + ecommerce  | 3785304.00   | 9140700.00 
Renting tecnológico        | 7223406.00   | 72986693.00
Branding                   | 3280937.00   | 4912017.00
Mercadeo y publicidad      | 3372619.00   | 0.00

Пока это мой код, но он не запустится:

DECLARE @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX)

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(FechaPpto) 
                      FROM Ingresos_Ppto 
                      GROUP BY FechaPpto, id
                      ORDER BY id
                      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SET @query = N'SELECT ' + @cols + N' from 
             (
                select Rubro, FechaPpto
                from Ingresos_Ppto
            ) x
            pivot 
            (
                max(Rubro)
                for FechaPpto in (' + @cols + N')
            ) p '

exec sp_executesql @query;

Я получаю эту ошибку:

Сообщение 8156, уровень 16, состояние 1, строка 12
Столбец '1 января 2019 12:00 AM' был указан несколько раз для 'p'

Как мне переписать код для достижения желаемого результата?

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