Frage

Ich versuche, eine Reihe von Ergebnissen neu zu ordnen / Gruppe mit SQL. Ich habe ein paar Felder (die für das Beispiel haben etwas weniger spezifisch für etwas umbenannt wurde), und jede logische Gruppe von Datensätzen hat ein Feld, das konstant bleibt - das Adressfeld. Darüber hinaus gibt es Felder, die für jede Adresse vorhanden sind, diese sind die gleichen für jede Adresse.

id  forename    surname     address
1   John        These       Address1
2   Lucy        Values      Address1
3   Jenny       Are         Address1
4   John        All         Address2
5   Lucy        Totally     Address2
6   Jenny       Different   Address2
7   Steve       And         Address2
8   Richard     Blah        Address2

address     John    Lucy            Jenny       Steve       Richard
Address1        These   Values          Are         (null)      (null)
Address2        All     Totally         Different   And         Blah

Zum Beispiel: John, Lucy, Jenny, Steve und Richard sind die einzigen möglichen Namen an jeder Adresse. Ich weiß das, weil es an einem anderen Ort gespeichert ist.

Kann ich wählen Werte aus den aktuellen Datensätze in der linken Bild, und bringt sie als Ergebnis wie das auf der rechten Seite eingestellt? Ich verwende MySQL, ob das einen Unterschied macht.

War es hilfreich?

Lösung

Unter der Annahme, dass die Spaltenüberschriften „John“, „lucy“ usw. festgelegt sind, können Sie Gruppe durch das Adressfeld und verwendet, wenn () -Funktionen mit Gesamt Operatoren Ihre Ergebnisse zu erhalten:

select max(if(forename='john',surname,null)) as john,
       max(if(forename='lucy',surname,null)) as lucy,
       max(if(forename='jenny',surname,null)) as jenny,       
       max(if(forename='steve',surname,null)) as steve,       
       max(if(forename='richard',surname,null)) as richard,
       address
from tablename 
group by address;

Es ist zwar ein bisschen spröde.

Es gibt auch die Group_concat Funktion, die (in Grenzen) verwendet werden kann, etwas ähnliches zu tun, aber es wird zeilenweise statt spaltenweise geordnet werden, wie Sie scheinen zu verlangen.

zB.

select address, group_concat( concat( forename, surname ) ) tenants 
from tablename
group by address;

Andere Tipps

Ich bin nicht sicher, aber ich denke, was Sie versuchen GROUP BY zu tun ist.

SELECT Address,Name FROM Table GROUP BY Name

Wenn Sie mehr Spalten auswählen möchten, stellen Sie sicher, dass sie in der GROUP BY-Klausel enthalten sind. Außerdem können Sie jetzt tun Aggregatfunktionen, wie MAX () oder COUNT ().

Ich bin nicht sicher über die Frage, aber von dem, was ich verstehe, Sie tun können:

SELECT concat(column1,column2,column3) as main_column, address from table;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top