У меня есть таблица с именем 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'
Как мне переписать код для достижения желаемого результата?