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 回答