我有以下查询,
SELECT AT.Name AS Name, COALESCE(VAL.Value, VALP.Value) AS Value
FROM Attributes AT
LEFT OUTER JOIN AttributesValues VAL ON VAL.AttributeID = AT.ID
LEFT OUTER JOIN AttributesValues VALP ON VALP.AttributeID = AT.ID
LEFT OUTER JOIN Products p ON p.ID = VAL.ProductID
LEFT OUTER JOIN AttributesGroups G ON G.ID = AT.GroupID
ORDER BY p.ID;
我看的是将名称显示为列,将值显示为列值。例如,
Name1 | Name2 | Name3
-----------------------
Value1 | Value2 | Value3
答案 0 :(得分:3)
希望这最适合你的情况..
CREATE TABLE #temp(Name varchar(25),value varchar(25))
INSERT #temp VALUES('a',1),('b',2),('c',3),('d',4),('e',4),('f',5)
首先为您的名字创建一个逗号分隔的字符串,这样您就可以将其用作数据透视中的列。
DECLARE @CommoSeperatedNames varchar(max)
SELECT @CommoSeperatedNames=STUFF((SELECT ',' + s.Name FROM #temp s ORDER BY s.Name FOR XML PATH('')),1,1,'')
此查询使用pivot,这里我使用动态查询从上面的变量中获取所有列名。
Execute( 'select '+@CommoSeperatedNames+' from #temp
pivot
(
MIN(value)
FOR Name
IN ('+ @CommoSeperatedNames+')
) as TST')
如果我们打印上面的动态查询,则输出以下语句。
select a,b,c,d,e,f from #temp
pivot
(
MIN(value)
FOR Name
IN (a,b,c,d,e,f)
) as TST
输出:
a b c d e f
1 2 3 4 4 5