两个动态列上的SQL Pivot

两个动态列上的SQL Pivot,sql,sql-server,pivot,pivot-table,Sql,Sql Server,Pivot,Pivot Table,我知道堆栈溢出上有很多PIVOT两列,但似乎没有一列适合我的需要:( 这是我的桌子: 我想把重点放在这一点上: 以下是初始设置: CREATE TABLE TblPivot (ID INT IDENTITY(1, 1), Shop VARCHAR(MAX), ElementId VARCHAR(10), QuestionId VARCHAR(10), [Value] VARCHAR(20) ); GO INSERT INTO TblPivot (Sho

我知道堆栈溢出上有很多PIVOT两列,但似乎没有一列适合我的需要:(

这是我的桌子:

我想把重点放在这一点上:

以下是初始设置:

CREATE TABLE TblPivot
(ID         INT IDENTITY(1, 1),
 Shop    VARCHAR(MAX),
 ElementId  VARCHAR(10),
 QuestionId VARCHAR(10),
 [Value]    VARCHAR(20)
);

GO
INSERT INTO TblPivot (Shop,ElementId,QuestionId,[Value]) VALUES ('Shop1','elem10','question1','one')
GO
INSERT INTO TblPivot (Shop,ElementId,QuestionId,[Value]) VALUES ('Shop1','elem11','question1','two')
GO
INSERT INTO TblPivot (Shop,ElementId,QuestionId,[Value]) VALUES ('Shop1','elem20','question2','1')
GO
INSERT INTO TblPivot (Shop,ElementId,QuestionId,[Value]) VALUES ('Shop1','elem20','question3','p1')
GO
INSERT INTO TblPivot (Shop,ElementId,QuestionId,[Value]) VALUES ('Shop1','elem21','question2','2')
GO
INSERT INTO TblPivot (Shop,ElementId,QuestionId,[Value]) VALUES ('Shop1','elem21','question3','p2')
我怀疑这一定是交叉应用和枢轴的问题,但我不确定如何解决这个问题

PS:元素ID可以为空

谢谢!

执行条件聚合:

select Shop,
       max(case when (QuestionId = 'question1' and ElementId = 'elem10')
                then value end) [question1- elem10],
       . . .
from TblPivot p
where QuestionId in ('question1', 'question2', 'question3') and
      ElementId in ('elem10', 'elem11', 'elem20', 'elem21')
group by Shop;

用连接的问题和元素生成一列(
QuestionID+ISNULL('-'+ElementID'),
),然后用动态SQL围绕该列旋转。@EzLo你是个邪恶的天才