【发布时间】:2019-10-16 21:36:56
【问题描述】:
测试数据:
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 使用相同的 Id 时:
for categoryId in ([1],[4],[5],[6])
我看到一个错误:
Msg 265, Level 16, State 1, Line 38 在中指定的列名“1” PIVOT 运算符与 枢轴论点。消息 8156,级别 16,状态 1,第 39 行“1”列 为“pivot_table2”指定了多次。
另外,我不能使用 [pivot_table1].[1]] 代替 * ,但是当我只使用一个 PIVOT 运算符时是可能的。
有人知道我该如何解决吗?
预期结果:
如何在两个 PIVOT 中使用相同的 id(列名)?
【问题讨论】:
-
这看起来你最好使用交叉表;示例数据和预期结果将在这里真正有所帮助。
-
@Larnu 完成。准备再次审核
-
你能提供预期的结果吗?
-
感谢 @BasilKosovan 的 DDL 和 DML,这是提供样本数据的最佳方式,做得很好,但我们确实需要知道您的最终结果应该是什么。
-
@Larnu 预期结果是在两个 PIVOT 中使用相同的列名称。 PeterHe 已经提供了解决方案
标签: sql-server pivot