PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] Aggregation



ExRevel
19.07.2004, 11:09
Hi...

Wenn ich in meiner SQL Datenbank zwei Felder habe, die einen String enthalten, "name" und "firma" und ich alphabetisch nach beiden sortieren möchte, wie stelle ich das am geschicktesten an. Wenn ich ein "order by name, firma asc" mache, erhalte ich eine Liste wo als erstes die Namen in alphabetischer reihenfolge kommen und danach die Firmennamen. Nun habe ich mir überlegt ein neues Feld im Select zu definieren und Name und Firmenname zusammenzufügen, doch da scheitere ich bei der Aggregation, das "+" tuts nicht und die anderen Funktionen die ich über Google so gefunden habe sagen mir nicht direkt zu :)

ciao Exi

hopfe
19.07.2004, 11:17
Welches DB-System verwendest du, wenn du in einer Spalte Namen und Firmen haben willst könntest du je nach DB System vielleicht eine View erzeugen?

ExRevel
19.07.2004, 11:23
Einen standard MySQL Server.

hehejo
19.07.2004, 11:23
Also ich kann dir nur sagen, dass man mit '||' im SQL Strings aneinanderfügt.
Oder du machst es so:



SELECT (name || ' ' || firma) AS 'NameFirma' FROM tabelle
ORDER BY NameFirma ASC;


Bei mir funktioniert es so wunderbar!

ExRevel
19.07.2004, 11:57
Hm, das schaut gut aus, aber leider Funktioniert es nur wenn beide Felder nicht null sind, genau wie CONCAT(string1, string2). Das ist derzeit mein Problem, da meist nur Firma oder nur Name gesetzt sind.

Aber danke dir auf jeden fall...

etuli
19.07.2004, 12:06
Ifnull( Null, '')

ExRevel
19.07.2004, 12:08
Oder so... :) Ich hab nun CONCAT_WS benutzt, das überspringt NULL und ich verbinde die Strings mit ''. Das ganze als neues Feld und danach sortieren.

Danke für eure Hilfe.

etuli
19.07.2004, 12:30
Wenn ich ein "order by name, firma asc" mache, erhalte ich eine Liste wo als erstes die Namen in alphabetischer reihenfolge kommen und danach die Firmennamen. Nun habe ich mir überlegt ein neues Feld im Select zu definieren und Name und Firmenname zusammenzufügen

Da kommt uebrigens das gleiche raus vom Sortieren her. Ob nun Name und Firma als Spalten, oder Name und Firma als einzelne Spalte, ist da nicht sonderlich relevant. :)

mfg

ExRevel
19.07.2004, 13:01
@etuli, wenn du das meinst, es ist aber nicht, so... bei mir werden dann zuerst die Namen und dann die Firmen aufgelistet, frag mich nicht warum das so ist, aber sonst hätte ich sicherlich nicht so einen Aufstand gestartet, wenn es mit der einfachsten funktion getan gewesen wäre, gell! :)

ciao Exi

hehejo
19.07.2004, 13:27
ExRevel, kannst du mir bitte nochmal erklären was du genau haben möchtest?

Du hast Spalte A und Spalte B und möchtest die wie sortiert haben?
order by A, B asc
order by B, A asc
??

ExRevel
19.07.2004, 13:35
Ich hab das Problem schon gelöst! :) Wir diskutieren nur noch so...

Ich hatte 2 Felder [a,b] und die waren nicht immer beide gefüllt und es sollte nach beiden sortiert werden... aber immer wenn ich die beiden dem order by übergeben habe wurden erst die namen oder erst die firma geordnet ausgegenben und hinten dran dann das dementsprechend andere feld. Das problem an sich war die felder zu verknüppfen, das hattest du schon vollkommen richtig erkannt.

ciao Exi

hehejo
19.07.2004, 13:41
Ok, na dann.
*verwirrt*

rhythm
19.07.2004, 17:47
Ich hab das Problem schon gelöst! :)

hey!

kannst du den befehl bitte nochmal zur ansicht posten, mit dem du das problem gelöst hast?

ciao, rhythm

ExRevel
19.07.2004, 18:40
Klar, das schaut bei mir nun so aus (vereinfachte fassung)...


SELECT *, CONCAT_WS('', name, firma) AS sortierung FROM table WHERE 1 ORDER BY sortierung ASC


ciao Exi

rhythm
19.07.2004, 19:52
thx! :]