2017-03-17 2 views
1

Ich habe eine Tabelle A wie untenErste unterschiedliche Werte von induvidual Spalten

id| Name|Subject  
--|-----|------- 
1 |Mano |Science 
2 |Pavi |Maths  
3 |Mano |Social  
1 |Kalai|Maths 
4 |Kalai|Science 

ich für jede Spalte unterschiedliche Werte wollen. Also meine Ausgabe wie

id|Name | Subject  
--|-----|-------- 
1 |Mano |Science  
2 |Pavi |Maths  
3 |Kalai|Social  
4 |  | 

ich versucht habe, mit Cursor. Aber ich habe nicht bekommen, was ich brauchte. Helfen Sie mir dabei, dies zu bekommen

+0

Zeile hinzufügen (5, Mano, Geographie) zu den Probentabellendaten und das Ergebnis anpassen. – jarlh

+0

Die Frage ergibt keinen Sinn. In einer relationalen Datenbank hat die Tatsache, dass ein "Name" und ein "Subjekt" in derselben Zeile stehen, eine Bedeutung. Den Zeilen in Ihrer Ausgabe ist keine solche Bedeutung zugeordnet. Woher kam diese Anforderung? – mathguy

Antwort

2

Sie scheinen nur eine Liste der verschiedenen Werte zu wollen, ohne Rücksicht darauf, was zusammen erscheint. Dies ist nicht sehr SQL'ish, aber getan werden kann:

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 für die Erwähnung der offensichtlichsten Punkt zu dieser Frage: Die Anforderung hat überhaupt nichts mit relationalen Datenbanken zu tun. – 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 | 
+----+-------+---------+ 
Verwandte Themen