2013-12-21 166 views

回答

1
select emplid, 
max(case when phone_type='home' then phone_number else -1 end) Home, 
max(case when phone_type='cell' then phone_number else -1 end) Cell, 
..... 
from phone_data 
group by emplid; 

您不能混用字符和NU meric在一个字段中,如果您在输出中需要n/a,则需要使电话号码列字符变为另一个步骤。

+0

上面的代码不工作,返回-1(N/A - 为电话号码数据类型是字符,在实际情况下)在每种情况下。而不是返回电话号码。 –

-1

试试这个SQL查询!

DECLARE @cols AS NVARCHAR(MAX),@query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.phone_type) 
      FROM youtablename c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT empid, ' + @cols + ' from 
      (
       select empid 
        , phone_number 
        , phone_type 
       from youtablename 
      ) x 
      pivot 
      (
       max(phone_number) 
       for phone_type in (' + @cols + ') 
      ) p ' 

execute(@query) 
0
select t.empid as empid, cell.phone_number as cell, home.phone_number as Home 
from telephones t 
inner join telephones cell on t.empid = cell.empid 
inner join telephones home on t.empid = home.empid 
where cell.Phone_type = "cell" 
and home.Phone_type = "home" 
group by t.empid 

和一个SQL小提琴:http://sqlfiddle.com/#!2/6bb17/11

+0

仅为拥有phone_type即Cell和Home的员工返回一组数据。在任何情况下,一个人只有一个phone_type然后不会返回该特定的行。 –