2017-03-17 95 views
1

我有一个表阿如下获取induvidual列的不同值

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

我一直在使用光标尝试。但我没有得到我所需要的。 有人帮我得到这个

+0

添加行(5,马诺,地理),以便为表格数据,并调整结果。 – jarlh

+0

这个问题没有意义。在关系数据库中,“名称”和“主题”在同一行中的含义是有意义的。没有这样的意义附加到输出中的行。这个要求来自哪里? – mathguy

回答

2

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

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; 
+0

+1提到关于这个问题最明显的一点:这个要求首先与关系数据库无关。 – mathguy

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