Я пытаюсь динамически повернуть таблицу PMESATOVERVIEW и присоединить ее к PMEOBJECT другой таблице с кодом ниже. Однако я хочу удалить некоторые столбцы из сводной таблицы.
Пример SQL: http://rextester.com/DKHF52968
Сначала я опишу пример данных:
PMEOBJECT
ObjectId, Location,
1, North
2, South
3, West
4, East
И внутреннее соединение сводной версии этой таблицы:
PMESATOVERVIEW
ObjectId, AttributeCat, AttributeId, Value
1, WW, Surface, 40
1, XX, Date, 1-1-2017
1, WW, Energy Label, B
2, WW, Surface, 45
2, XX, Date, 3-5-2017
3, WW, Surface, 50
3, WW, Energy Label, A
4, WW, Surface, 50
4, XX, Date, 1-4-2018
4, WW, Energy Label, A+
Со следующим кодом:
DECLARE @colsValues
AS NVARCHAR(max) = Stuff(
(SELECT DISTINCT ',' +
Quotename(fat.ATTRIBUTEID)
FROM PMESATOVERVIEW fat
FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
DECLARE @query AS NVARCHAR(max) =
'SELECT *
FROM (SELECT *
FROM PMESATOVERVIEW
PIVOT(Max(VALUE)
FOR ATTRIBUTEID IN ('+
@colsValues +')) piv) fat
INNER JOIN PMEOBJECT tb
ON tb.OBJECTID = fat.OBJECTID';
EXECUTE(@query)
Этот код работает без ошибок, но я получаю следующий результат:
PMESATOVERVIEW
ObjectId AttributeCat Date Energy Label Surface ObjectId Location
1 WW NULL C 40 1 North
2 WW NULL B 40 2 West
3 WW NULL A+ 45 3 South
4 WW NULL NULL 50 4 East
1 XX 1-1-2017 NULL NULL 1 North
2 XX 3-4-2017 NULL NULL 2 West
4 XX 1-5-2018 NULL NULL 4 East
И что я хочу, это:
ObjectId Date Energy Label Surface ObjectId Location
1 1-1-2017 C 40 1 North
2 3-4-2017 B 40 2 West
3 NULL A+ 45 3 South
4 1-5-2018 NULL 50 4 East
Результат оператора SQL: http://rextester.com/DKHF52968
Есть идеи, как это сделать?
Я попытался выбрать только несколько столбцов в операторе Pivot, но каким-то образом он не распознает ObjectId, AttributeId и Value.
Есть идеи по этому поводу?
С уважением,
Игорь