2011-06-11 142 views
1

表名稱是的UserData和名稱列PRIMARY KEY,我有一個查詢返回以下 像轉換行到列SQL Server 2008中

選擇名稱,jobProfile從的UserData

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 
+1

爲什麼'B','C',並在輸出相同的行'了'?也就是說,哪些規則管理着轉型? – Oded 2011-06-11 18:12:34

+0

@Oded - 從我所能看到的'job profile'列中的唯一值定義輸出列。列中的值對應於輸入的「name」列。 – 2011-06-11 18:16:42

+0

@Alex - 是的,我看到了。例如,仍然沒有解釋爲什麼'f','c'和'd'在不同的行中。 – Oded 2011-06-11 18:19:31

回答

0

既然你沒有提供非常多的信息,或者說治理改造的任何規則,唯一的答案,我可以給是檢查出PIVOT功能。

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