2012-04-17 8 views

答えて

1

何か:

テストデータ

CREATE TABLE #tbl(date_a DATE,date_e DATE, vals FLOAT) 

INSERT INTO #tbl 
VALUES 
    ('2/29/2012','1/1/2013',28.47), 
    ('2/29/2012','2/1/2013',27.42), 
    ('2/29/2012','3/1/2013',24.36), 
    ('3/1/2012','1/1/2013',28.5), 
    ('3/1/2012','2/1/2013',27.35), 
    ('3/1/2012','3/1/2013',24.39), 
    ('3/6/2012','1/1/2013',27.75), 
    ('3/6/2012','2/1/2013',26.63), 
    ('3/6/2012','3/1/2013',23.66) 

クエリ

SELECT 
    * 
FROM 
( 
    SELECT 
     tbl.date_a, 
     tbl.date_e, 
     vals 
    FROM 
     #tbl AS tbl 
) AS SourceTable 
PIVOT 
(
    SUM(vals) 
    FOR date_e IN ([1/1/2013],[2/1/2013],[3/1/2013]) 
) AS pvt 

DROP TABLE #tbl 

EDIT

いくつの列があるか分からない場合は、動的な操作を行う必要がありますpivot。このように:

ユニーク列

DECLARE @cols VARCHAR(MAX) 
;WITH CTE 
AS 
(
    SELECT 
     ROW_NUMBER() OVER(PARTITION BY date_e ORDER BY date_e) AS RowNbr, 
     tbl.* 
    FROM 
     #tbl AS tbl 
) 
SELECT @cols=STUFF 
(
    (
     SELECT 
      ',' +QUOTENAME(date_e) 
     FROM 
      CTE 
     WHERE 
      CTE.RowNbr=1 
     FOR XML PATH('') 
    ) 
,1,1,'') 

ダイナミックピボット感謝の

DECLARE @query NVARCHAR(4000)= 
N'SELECT 
    * 
FROM 
( 
    SELECT 
     tbl.date_a, 
     tbl.date_e, 
     vals 
    FROM 
     #tbl AS tbl 
) AS SourceTable 
PIVOT 
(
    SUM(vals) 
    FOR date_e IN ('[email protected]+') 
) AS pvt' 
EXECUTE(@query) 
+0

負荷、それは欠陥なしで働いていました。クロックが2分の障壁に達するとそれを受け入れるでしょう:) –

+0

問題はありません。嬉しいことです:P ..私はあなたのためのボーナスの例を追加しました:P ..見てください。 – Arion

+0

thatsちょうど素晴らしい! cudntもっと尋ねます.. :)たくさんのおかげです。 –

関連する問題