将行转换为SQL Server 2008列

时间:2011-06-11 18:09:37

标签: sql sql-server sql-server-2005 tsql sql-server-2008

表名是UserData,name列是PRIMARY KEY,我有一个返回以下内容的查询 喜欢

  

从UserData

中选择名称,jobProfile
name  |  jobProfile
     
  a   |   Admin
  b   |   user
  c   |   employee
  d   |   Admin
  e   |   user
  f   |   user
  g   |   employee

我想像这样结果(如果可能的话)

 user  | employee |  Admin
___________________________
 b     |  c       |  a
 e     |  g       |  d
 f     |  null    |  null

2 个答案:

答案 0 :(得分:2)

我不确定为什么人们试图关闭这个问题。对我来说似乎是合法的问题而不是引用问题的重复。引用的问题有3列作为输入,而这个问题有两列。所以需要额外的技巧。

-- test data
declare @UserData table (Name varchar(10), JobProfile varchar(10))

insert @UserData
values
  ('a' ,  'Admin'),
  ('b' ,  'user'),
  ('c' ,  'employee'),
  ('d' ,  'Admin'),
  ('e' ,  'user'),
  ('f' ,  'user'),
  ('g' ,  'employee')

-- query
select [user], [employee], [Admin]
from
(
    select *, row_number() over (partition by JobProfile order by Name) RowNumber
    from @UserData
) as p
pivot
(
    min(Name) for JobProfile in ([user], [employee], [Admin])
) as t
order by RowNumber

输出:

user       employee   Admin
---------- ---------- ----------
b          c          a
e          g          d
f          NULL       NULL

答案 1 :(得分:0)

由于您没有提供太多信息或任何管理转换的规则,我可以给出的唯一答案是检查 PIVOT 功能。