0

次の表があります: tb_answers

テーブル構造は以下の通り

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

だから私はの値でソートすることができますQUESTION#QUESTIONID#

これは可能ですか?私はピボットとユニオンが苦手なので、助けていただければ幸いです。

4

1 に答える 1

1

これは公式の 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

ご覧のとおり、ピボットされた列を明示的に指定しています。これはデータ駆動型ではありません。完全にデータ ドリブンにするには、基本的に 2 つのパスを実行する必要があります。最初のパスでは、列名を文字列テンプレートに生成します。2 番目のパスは、生成された 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,''))
于 2013-03-28T00:35:03.980 に答える