0

ソース テーブルが次の場合:

City         1996-MAY  1996-june  1996-july 1996-aug  1996-sep  1996-okt
 -----------  --------  --------  --------  --------  --------  --------
New Orleans         6          3         3         3         3         3    
Los Angeles         4          3         3         3         3         3
select city, 1996-MAY, 1996-june, 1996-july, 1996-aug, 1996-sep, 1996-okt
  from a  

要求された結果は次のとおりです。

City         People    Date
-----------  --------  --------
New Orleans         6  1996-MAY
Los Angeles         4  1996-MAY  
New Orleans         3  1996-june
Los Angeles         3  1996-june  
New Orleans         3  1996-july 
Los Angeles         3  1996-july 
....            ...        .....  

どうすればいいですか?

これは 1 つのコラムだけではなく、2003 年 5 月までの多数のコラムです。

4

1 に答える 1

3

使用UNPIVOT

SELECT  City, Date, People
FROM    T
        UNPIVOT 
        (   People 
            FOR Date IN ([1996-May], [1996-June], [1996-July])
        ) upvt

これを動的に行うこともできます。

DECLARE @SQL NVARCHAR(MAX) = ''

SELECT  @SQL = ',' + QUOTENAME(Name)
FROM    SYS.COLUMNS 
WHERE   OBJECT_ID = OBJECT_ID('TableName')  
AND     Name != 'City'

SET @SQL = 'SELECT  City, Date, People
            FROM    T
                    UNPIVOT 
                    (   People 
                        FOR Date IN (' + STUFF(@SQL, 1, 1, '') + ')
                    ) upvt'

EXECUTE SP_EXECUTESQL @SQL
于 2012-06-17T21:08:00.853 に答える