2016-05-25 7 views
3

Daten in MySQL mit doppelten Werten in der ersten Spalte und eindeutige Werte in Spalte zur Umsetzung der folgenden Tabelle von Informationen:Ich brauche 2

id | job | code 
1 | 100 | ab123 
2 | 100 | ab124 
3 | 101 | ab125 
4 | 101 | ab126 
5 | 101 | ab127 
6 | 102 | ab128 
7 | 102 | ab129 
8 | 103 | ab130 
9 | 104 | ab131 

Ich muss erhalten die folgende Tabelle zeigt die drei Codes in anderen zu verwenden, Abfragen:

job | code1 | code2 | Code3 
100 | ab123 | ab124 | 
101 | ab125 | ab126 | ab127 
102 | ab128 | ab129 | 
103 | ab130 |  | 
104 | ab131 |  | 

Es wird immer nur 3 Codes geben.

Vielen Dank im Voraus

+0

Wird diese 'Auftrag by' id? – Blank

+0

Haben Sie etwas versucht? –

Antwort

3

Das ist ein bisschen schwierig mit MySQL ist (im Vergleich zu anderen Datenbanken mit Fenstern und Pivot-Funktionen), aber Sie können dies tun, als innerhalb jeder Gruppe von Job-Elementen einer Abfrage, die Zahlen Zeilen durch Verwendung abgeleitete Tabelle und verwendet, die als Quelle für eine äußeree Abfrage mit bedingter Aggregation:

select 
    job, 
    max(case when rn = 1 then code end) as Code1, 
    max(case when rn = 2 then code end) as Code2, 
    max(case when rn = 3 then code end) as Code3 
from (
    select id,  
     code, 
     case job 
      when @grp then @row := @row + 1 
      else @row := 1 
     end as rn, 
     @grp := job as job 
    from Table1 t 
    join (select @row := 0, @grp := '') r 
    order by id, job 
) s 
group by job 

ich, dass der Code Artikel angenommen sollte ID bestellt werden, aber wenn Sie wenn mit Code wollen, nur die Reihenfolge von Klausel ändern in die abgeleitete Tabelle.

Der Nummerierungsteil basiert auf Antworten auf this question.

Sample SQL Fiddle

Beispielausgabe:

| job | Code1 | Code2 | Code3 | 
|-----|-------|--------|--------| 
| 100 | ab123 | ab124 | (null) | 
| 101 | ab125 | ab126 | ab127 | 
| 102 | ab128 | ab129 | (null) | 
| 103 | ab130 | (null) | (null) | 
| 104 | ab131 | (null) | (null) | 
+1

du bist ein absoluter Held! – Bing