Sql server 2005 选择列值作为列名

Sql server 2005 选择列值作为列名,sql-server-2005,pivot,union,Sql Server 2005,Pivot,Union,我有下表:tb_答案 表结构如下所示 ID | QUESTIONID | SURVEYID | LEAGUEID | MEMBERID | ANSWER | DATEADDED | DIVISIONID 样本数据 302347 | 2336 | 172 | 146 | 68 | 467 Vallie Lane | 2012-05-21 16:36:22.433 | 0 302350 | 2340 | 172 | 146 | 68 | 591 | 2012-05-21 1

我有下表:tb_答案

表结构如下所示

ID | QUESTIONID | SURVEYID | LEAGUEID | MEMBERID | ANSWER | DATEADDED | DIVISIONID
样本数据

302347 | 2336 | 172 | 146 | 68 | 467 Vallie Lane | 2012-05-21 16:36:22.433 | 0
302350 | 2340 | 172 | 146 | 68 | 591             | 2012-05-21 16:36:22.483 591
我需要将这些数据呈现如下

DYNNAMIC LIST OF QUESTION#QUESTIONID# | MEMBERID | DIVISION
DYNNAMIC LIST OF VALUES OF QUESTION#QUESTIONID#|#MEMBERID#|DIVISION
所以我可以根据QuestionID的值进行排序


这可能吗?我不擅长pivot和union,因此非常感谢您的帮助。

这是官方MS示例:

SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;
这是数据的轴心:

USE AdventureWorks2008R2 ;
GO
SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost 
FROM Production.Product
GROUP BY DaysToManufacture;
这是由谁产生的

DaysToManufacture          AverageCost    
0                          5.0885    
1                          223.88    
2                          359.1082    
4                          949.4105
正如您所看到的,他们已经明确指定了数据透视列—它不是数据驱动的。要使事情完全由数据驱动,您必须完成两个过程,第一个过程将列名生成到字符串模板中。第二步执行生成的SQL

DECLARE @dyncols AS VARCHAR(MAX) = (SELECT 
  STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(VARCHAR(50), YOURPIVOTCOL)) 
  FROM YOURTABLE FOR XML PATH(''), TYPE).VALUE('.', 'VARCHAR(MAX)'),1,1,''))

现在还不清楚您想要的结果是什么,请编辑您的原始问题,并使用您提供的示例数据显示所需的结果。