Sql 获取独立列的不同值

Sql 获取独立列的不同值,sql,oracle11g,Sql,Oracle11g,我有一张a表,如下所示 id| Name|Subject --|-----|------- 1 |Mano |Science 2 |Pavi |Maths 3 |Mano |Social 1 |Kalai|Maths 4 |Kalai|Science 我希望每个列都有不同的值。 所以我的输出应该是这样的 id|Name | Subject --|-----|-------- 1 |Mano |Science 2 |Pavi |Maths

我有一张a表,如下所示

id| Name|Subject    
--|-----|-------
1 |Mano |Science   
2 |Pavi |Maths    
3 |Mano |Social    
1 |Kalai|Maths  
4 |Kalai|Science
我希望每个列都有不同的值。 所以我的输出应该是这样的

id|Name | Subject    
--|-----|--------
1 |Mano |Science    
2 |Pavi |Maths    
3 |Kalai|Social    
4 |     |
我试过使用游标。但我没有得到我需要的。
有谁能帮我弄到这个

你们似乎只想要一个不同值的列表,而不考虑一起出现的内容。这不是很SQL,但可以做到:

select row_number() over (order by n.seqnum) as firstcol, n.name, s.subject
from (select name, row_number() over (order by name) as seqnum
      from t
      group by name
     ) n full outer join
     (select subject, row_number() over (order by subject) as seqnum
      from t
      group by subject
     ) s
     on s.seqnum = n.seqnum;


将行(5,Mano,Geography)添加到示例表数据中,并调整结果。这个问题毫无意义。在关系数据库中,“名称”和“主题”在同一行这一事实具有意义。输出中的行没有附加这样的含义。这个需求从何而来?+1提到了这个问题最明显的一点:这个需求首先与关系数据库无关。
select    *

from     (select  col,val,dense_rank () over (partition by col order by val)  as dr    
          from    mytable unpivot (val for col in (name,subject)) u
          ) pivot (min(val) for col in ('NAME','SUBJECT'))    

order by  dr
+----+-------+---------+
| DR | NAME  | SUBJECT |
+----+-------+---------+
|  1 | Kalai | Maths   |
|  2 | Mano  | Science |
|  3 | Pavi  | Social  |
+----+-------+---------+