0

次のように、年数に応じた給与の従業員テーブルがあります。

Employee_table
-----------------------------------------------------------------------------
emp_ID -  FirstName- LstName   salary  ...    year -  
001   -   xx     -     yy   -   03212         2000       
001   -   xx     -     yy   -   04212         2001        
002   -   xxx     -    yyy  -   03425         2000         
002   -   xxx     -    yyy  -   04425         2001          
003   -   xxxx    -    yyyy  -  03429         2000         
003   -   xxxx   -     yyyy  -  04429         2001         
------------------------------------------------------------------------------

そして、列側に年がある従業員データを次のように与えるクエリを書きたいと思います。

tblResults
---------------------------------------------------------------------
emp_ID   2000       2001          ....     ....            
---------------------------------------------------------------------
01        03212     04212   
02        03425   - 04425    
03        03429     04429   
4

1 に答える 1

5

わかりました、@ SpectralGhostが言ったように、使用できますPIVOT. 必要な年数が事前にわかっている場合は、次のことができます。

SELECT *
FROM (  SELECT emp_ID, salary, [year]
        FROM Employee_Table) AS ET
PIVOT(MIN(salary) FOR [year] IN ([2000],[2001],[2002])) AS PT

何年あるかわからない場合は、動的SQLが必要になります(最初に、このリンクにアクセスしてください)。次に、これを試してください:

DECLARE @Years NVARCHAR(MAX), @Query NVARCHAR(MAX)

SELECT @Years = STUFF(( SELECT DISTINCT ',' + QUOTENAME([year]) 
                        FROM Employee_Table
                        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @Query = '
SELECT *
FROM (  SELECT emp_ID, salary, [year]
        FROM Employee_Table) AS ET
PIVOT(MIN(salary) FOR [year] IN ('+@Years+')) AS PT'

EXEC(@Query)
于 2012-10-19T19:16:28.360 に答える