如何透视tsql中的第二列

如何透视tsql中的第二列,sql,tsql,Sql,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, r

以下是我当前的数据集:

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

我将如何修复代码以便只返回1行?

您可以将
行数()
条件聚合一起使用:

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

    • 如果只有两个,那么就这样做。又短又甜

      SELECT  rname,
              MIN(ename) ename1,
              MAX(ename) ename2
      FROM relationships
      GROUP BY rname
      
      在甲骨文中

       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))
      

      好的,这就解决了,以前没见过cte。谢谢@user2146212--np、cte是
      公共表表达式
      --有点像临时视图。解决方案的关键是使用
      行编号()
      建立分组。
       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))