# Distinct-problem



## Soapp (19. Juni 2006)

Ich bekomme aus einem JOIN mit 4 Tabellen ein Ergebnis.
vereinfachtes Beispiel:

ID--  Produktname---Produktkategorie------   Hersteller

213  IPOD------------MP3-----------------------MEDIAMARKT
213  IPOD------------MP3-----------------------SATURN


ich möchte nun als Ausgabe:

213  IPOD------------MP3-----------------------SATURN, MEDIAMARKT

Das heisst es sollen alle doppelten Zeilen, bei denen alles ausser dem Hersteller
gleich ist in eine Zeile gefasst werden.
Geht das mit SQL oder muss ich das in PHP lösen ?
Wie könnte ich das machen ?

Danke

Soapp


----------



## Matthias Reitinger (19. Juni 2006)

Hallo,

selektiere zusätzlich GROUP_CONCAT(DISTINCT `Hersteller` SEPARATOR ', ') AS `Hersteller` und gruppiere nach ID (davon ausgegangen, dass bei gleicher ID auch Produktname und -kategorie identisch sind).

Grüße,
 Matthias


----------



## Soapp (19. Juni 2006)

Matthias Reitinger hat gesagt.:
			
		

> Hallo,
> 
> selektiere zusätzlich GROUP_CONCAT(DISTINCT `Hersteller` SEPARATOR ', ') AS `Hersteller` und gruppiere nach ID (davon ausgegangen, dass bei gleicher ID auch Produktname und -kategorie identisch sind).
> 
> ...




versteht das der MSSQL-Server auch ?
anscheinend nicht....
Dann muss ich halt für jede ID die Hersteller abfragen und ausgeben.
Dazu müsste ich die Query so ändern dass er mir alle Zeilen die bis auf den Hersteller identisch sind
in eine Zeile macht.

ID-- Produktname---Produktkategorie------ Hersteller

213 IPOD------------MP3-----------------------MEDIAMARKT
213 IPOD------------MP3-----------------------SATURN


sollte dann ergeben:

213 IPOD------------MP3-----------------------MEDIAMARKT

dann kann ich ja über die ID alle Hersteller abfragen.
Mit DISTINCT schmeisst er mir aber nur die Zeilen raus, wenn alle Spalten komplett identisch sind.

was tun ?


Danke

Soapp


----------



## Matthias Reitinger (19. Juni 2006)

Hallo,



			
				Soapp hat gesagt.:
			
		

> versteht das der MSSQL-Server auch ?
> anscheinend nicht....


Sorry, aber du hast ja leider nicht erwähnt, dass du MSSQL verwendest.

Das Verhalten von GROUP_CONCAT kann man in MSSQL allerdings nachbilden: http://www.stevenmapes.com/index.ph...QL-GROUP_CONCAT-In-MSSQL-Cross-Tab-Query.html



> Mit DISTINCT schmeisst er mir aber nur die Zeilen raus, wenn alle Spalten komplett identisch sind.
> 
> was tun ?


Einfach nach ID gruppieren.

Grüße,
 Matthias


----------



## Soapp (20. Juni 2006)

Matthias Reitinger hat gesagt.:
			
		

> Hallo,
> 
> Einfach nach ID gruppieren.
> 
> ...




danke, aber leider funktioniert das nicht .... 

Die P.MODIFIED_TIME-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Die P.NAME-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Die P.COMMENT-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.


```
SELECT  P.ID, P.MODIFIED_TIME, P.NAME, P.COMMENT, P.CATEGORY_ID as CAT_ID from PRODUCTS as P
JOIN....
JOIN....
group by p.id
```


Danke, danke, danke


Soapp


----------



## hachel (13. Juli 2006)

Sowas wie "GROUP_CONCAT" habe ich ebenso gesucht.
Komisch, dass das nicht in meinem MySQL Buch steht.

Danke danke danke auch von mir!

greetz Hachel


----------

