在SQL Server,你可以使用PIVOT但不超过一列
有一个窍门:串联数据,让它看起来像XML。这种化合物的数据是可转动和 - 因为它是XML - 你可以把它的类型安全和容易:
DECLARE @tblType TABLE(ID INT,Caption VARCHAR(100));
INSERT INTO @tblType VALUES
(1,'Type1')
,(2,'Type2')
,(3,'Type3');
DECLARE @tbl TABLE(ID INT,TYPEID INT,[TEXT] VARCHAR(100),MARKUP VARCHAR(100));
INSERT INTO @tbl VALUES
(1,1,'type 11','markup 11')
,(1,2,'type 21','markup 21')
,(1,3,'type 31','markup 31')
,(2,2,'type 22','markup 22')
,(2,3,'type 32','markup 32')
,(3,1,'type 13','markup 13')
,(3,3,'type 33','markup 33');
SELECT p.ID
,Casted.Type1Xml.value('/x[1]','varchar(max)') AS Type1_Text
,Casted.Type1Xml.value('/x[2]','varchar(max)') AS Type1_Markup
,Casted.Type2Xml.value('/x[1]','varchar(max)') AS Type2_Text
,Casted.Type2Xml.value('/x[2]','varchar(max)') AS Type2_Markup
,Casted.Type3Xml.value('/x[1]','varchar(max)') AS Type3_Text
,Casted.Type3Xml.value('/x[2]','varchar(max)') AS Type3_Markup
FROM(
SELECT tbl.ID
,tp.Caption
,'<x>' + tbl.[TEXT] + '</x><x>' + tbl.MARKUP + '</x>' AS ConcatenatedData
FROM @tbl AS tbl
INNER JOIN @tblType AS tp ON tbl.TYPEID=tp.ID
) AS x
PIVOT
(
MIN(ConcatenatedData) FOR Caption IN(Type1,Type2,Type3)
) AS p
CROSS APPLY
(
SELECT CAST(p.Type1 AS XML) AS Type1Xml
,CAST(p.Type2 AS XML) AS Type2Xml
,CAST(p.Type3 AS XML) AS Type3Xml
) AS Casted
结果
1 type 11 markup 11 type 21 markup 21 type 31 markup 31
2 NULL NULL type 22 markup 22 type 32 markup 32
3 type 13 markup 13 NULL NULL type 33 markup 33
这似乎是一种自我的场景加入。没有什么与枢轴有关。 –
您希望每个ID有多少行?并且请说明您的RDBMS(供应商和版本) – Shnugo
如果您提供更多的示例数据来证明您正在尝试做什么,它可能会有所帮助。 –