2015-05-08 72 views
2

這裏是我當前的數據:如何轉動在TSQL第二列

rname ename 
Advises Grad_student 
Advises Faculty 
Chairs Department 
Chairs Faculty 

我試圖進入它的格式如下:

rname ename1  ename2 
advises grad_student faculty 
chairs department faculty 

這裏是我試過到目前爲止:

select distinct 
r1.rname, r1.ENAME as ename1,r2.ENAME as ename2 
from [dbo].[RELATIONSHIPS] r1 
inner join(
select distinct 
RNAME, ENAME 

from [dbo].[RELATIONSHIPS]) r2 
on r1.RNAME = r2.RNAME 
where r1.ENAME <> r2.ENAME 

order by r1.rname 

這裏就是我恢復:

rname ename1  ename2 
Advises Grad_student Faculty 
Advises Faculty  Grad_student 
Chairs Department Faculty 
Chairs Faculty  Department 

我該如何修復我的代碼才能獲得1行?

回答

1

您可以使用row_number()conditional aggregation

with cte as (
    select rname, ename, row_number() over (partition by rname order by ename) rn 
    from relationships 
) 
select rname, 
    max(case when rn = 1 then ename end) ename1, 
    max(case when rn = 2 then ename end) ename2 
from cte 
group by rname 
+0

好吧,這解決了它,也沒有CTE見過。謝謝! – user2146212

+0

@ user2146212 - np,ctes是'common-table-expressions' - 有點像臨時視圖。解決方案的關鍵是使用'row_number()'建立一個分組。 – sgeddes

0

如果只有過二,然後就去做這樣。簡短而甜美。

SELECT rname, 
     MIN(ename) ename1, 
     MAX(ename) ename2 
FROM relationships 
GROUP BY rname 
1

在oracle中

select * from 
(select rname,ename, 
RANK() over (partition by rname order by ename) Id 
FROM relationships) 
PIVOT(MAX(ename) for Id in (1 as ename1, 2 as ename2)) 
相關問題