1.5k Aufrufe
Gefragt in Datenbanken von

Hallo,

durch eine SQL-Datenbankabfrage bekomme ich folgendes beispielhaftes Ergebnis:

ID NAME LAND ATTRIBUT ...
4711 Fahrzeug DE Lenkrad
4711 Fahrzeug DE Sitz
4711 Fahrzeug DE Spiegel
4711 Fahrzeug DE Motor
4711 Fahrzeug DE Räder

Allerdings möchte ich, dass alle Inhalte der Spalte ATTRIBUT in einer Zeile ausgegeben werden, sodass die Informationen der ersten drei Spalten nur einmal vorkommen, also so:

ID NAME LAND ATTRIBUT ... ...
4711 Fahrzeug DE Lenkrad, Sitz, Spiegel, Motor, Räder

Ich habe schon mal was mit CONCAT oder LISTAGG gehört, kenne mich aber noch zu wenig in SQL aus....

Wichtig für mich wäre zu wissen, wie ich dass in meinem SQL-Code ausführen muss. Mein Code sieht zur zeit so aus (beispielhaft):

select ANLAGE.id as 'ID', ANLAGE.NAME as 'NAME', ANLAGE.LAND as 'LAND', SACHWERT.ATTRIBUT, ...

from ANLAGE left join SACHWERT ON ANLAGE.GUID = SACHWERT.INSTANZGUID

where ANLAGE.id = '4711'

DANKE im Voraus für eure Hilfe!

1 Antwort

0 Punkte
Beantwortet von

Hallo, ohne eine Hilfstabelle und ohne Unterabfragen wirst du das nicht hinbekommen. Ich habe gestern auch daran gefummelt. Mein Ziel war es, zu einem Datenbanksatz mehrere Bilddateien in eine Zeile zu bekommen.

Nach einigem Hin und Her tricksen habe ich mir erst mal auf dem SQL-Server eine neue Sicht erstellt, in dem die Bilder eine fortlaufende Nummer verpasst bekommen haben. Das wäre in deinem Falle ja das Attribut.

SELECT
  ROW_NUMBER() OVER(Partition by INSTANZGUID   ORDER BY INSTANZGUID ASC) AS Anzahl_INSTANZGUID,

und dann das Atribut und die Instanzguid und was du sonst noch brauchst.

Anschließend habe ich eine Abfrage von der Tabelle gemacht, die ich benötigte, mir alles geholt was ich brauchte und  durch Unterabfragen die Bilder bereitgestellt und  geholt.

select
Unterabfrage.RECID as id, '' as Name,''  as Name, Bild1+', '+Bild3+', '+Bild4+', '+Bild5+', '+Bild6 as Atribut
from  tb
left join
(select t.RECID,  t.LABNAHME,  t.mandnr
, case when dok1.Anzahl_Dokumente = 1 and dok1.recid = t.idnr then dok1.DOKLINK else '' end as Bild1
, case when dok2.Anzahl_Dokumente = 2 and dok2.recid = t.idnr then dok2.DOKLINK else '' end as Bild2
, case when dok3.Anzahl_Dokumente = 3 and dok3.recid = t.idnr then dok3.DOKLINK else '' end as Bild3
, case when dok4.Anzahl_Dokumente = 4 and dok4.recid = t.idnr then dok4.DOKLINK else '' end as Bild4
, case when dok4.Anzahl_Dokumente = 5 and dok5.recid = t.idnr then dok5.DOKLINK else '' end as Bild5
, case when dok4.Anzahl_Dokumente = 6 and dok6.recid = t.idnr then dok6.DOKLINK else '' end as Bild6
 FROM dbo.tb AS t                         
inner join  EINHEIT e on t.einheitnr = e.EINHEITNR and t.PROJEKTNR = e.PROJEKTNR and e.MANDNR = t.MANDNR
inner join PROJEKT p on t.projektnr = p.projektnr and t.mandnr = p.mandnr and p.PROJEKTNR = e.PROJEKTNR  and p.mandnr = e.MANDNR      
left join (select * from Tagbdok where Anzahl_Dokumente = 1) dok1 on t.projektnr = dok1.projektnr and t.MANDNR = dok1.MANDNR  and dok1.recid = t.IDNR
left join (select * from Tagbdok where Anzahl_Dokumente = 2) dok2 on t.projektnr = dok2.projektnr and t.MANDNR = dok2.MANDNR  and dok2.recid = t.IDNR
left join (select * from Tagbdok where Anzahl_Dokumente = 3) dok3 on t.projektnr = dok3.projektnr and t.MANDNR = dok3.MANDNR  and dok3.recid = t.IDNR
left join (select * from Tagbdok where Anzahl_Dokumente = 4) dok4 on t.projektnr = dok4.projektnr and t.MANDNR = dok4.MANDNR  and dok4.recid = t.IDNR
left join (select * from Tagbdok where Anzahl_Dokumente = 5) dok5 on t.projektnr = dok5.projektnr and t.MANDNR = dok5.MANDNR  and dok5.recid = t.IDNR
left join (select * from Tagbdok where Anzahl_Dokumente = 6) dok6 on t.projektnr = dok6.projektnr and t.MANDNR = dok6.MANDNR  and dok6.recid = t.IDNR
) as Unterabfrage on 

Ich habe meinen Code mal komplett gekürzt und Informationen, wegen Datenschutz rausgenommen. Wenn du dir diesen rein kopierst und alles anpasst, wie deine Informationen heißen, solltest du je Zeile deine Informationen bekommen. 

Ich hoffe es hilft dir weiter. Ich habe heute auch eine Anfrage eingestellt, weshalb ich deine überhaupt gesehen habe. Jetzt habe ich die Bild.urls schön in einer Reihe, bekomme diese aber noch nicht in eine Excel-Tabelle eingebettet, die eine Vorlage ist.

Mal schauen, ob ich hilfreiche Info's bekomme.

Gruß Christiane

...