Тестовые данные:
CREATE table #user (ID INT)
insert into #user values (1)
CREATE table #type
(
subscriberId INT,
typeId INT,
typeValue NVARCHAR(256)
)
insert into #type values (1,1,'Type1')
insert into #type values (1,2,'Type2')
insert into #type values (1,3,'Type3')
CREATE table #category
(
subscriberId INT,
categoryId INT,
categoryValue NVARCHAR(256)
)
insert into #category values (1,1,'Category1')
insert into #category values (1,4,'Category4')
insert into #category values (1,5,'Category5')
insert into #category values (1,6,'Category6')
У меня есть запрос, который отлично работает
SELECT * FROM (
SELECT t.subscriberId,
t.typeId, t.typeValue,
c.categoryId, c.categoryValue
FROM #user u
INNER JOIN #type t on t.subscriberId = u.id
INNER JOIN #category c on c.subscriberId = u.id) target
PIVOT(
max(typeValue)
for typeId in ([1],[2],[3])
) as [pivot_table1]
PIVOT (
max(categoryValue)
for categoryId in ([4],[5],[6])
) as [pivot_table2]
Но когда я пытаюсь использовать одинаковые идентификаторы для categoryId и typeId:
for categoryId in ([1],[4],[5],[6])
Я вижу ошибку:
Сообщение 265, уровень 16, состояние 1, строка 38 Имя столбца «1», указанное в операторе PIVOT, конфликтует с существующим именем столбца в PIVOTаргумент. Msg 8156, Уровень 16, Состояние 1, Строка 39 Столбец '1' был указан несколько раз для 'pivot_table2'.
Кроме того, я не могу использовать [pivot_table1].[1]]
вместо *, но этовозможно, когда я использую только один оператор PIVOT. У кого-нибудь есть идеи как это исправить? Ожидаемый результат: Как я могу использовать один и тот же идентификатор (имя столбца) в обоих PIVOT?