Zum Inhalt wechseln


Foto

Problem bei SQL-Kreuzabfrage (div. Spaltenwerte in ein Zeile zusammenführen)


  • Bitte melde dich an um zu Antworten
Eine Antwort in diesem Thema

#1 hupe__x

hupe__x

    Newbie

  • 1 Beiträge

 

Geschrieben 19. Juni 2017 - 16:44

Hallo zusammen,
ich habe 2 SQL Tabellen, aus denen ich Daten zu einer Tabelle vereinen muss
 

Tabelle 1

==============================
FileID      | ModId

--------------------------------------

123456   | 201700033 

234567   | 201700121

345678   | 201700092

 

 

Tabelle 2

==============================
ModId           | Name     | Value

--------------------------------------

201700033   | Nr           | 123

201700033   | Name     | Test1 GmbH

201700033   | eMail      | info@test1.de

201700033   | PLZ        | 44444

201700121   | Nr           | 234

201700121   | Name     | Test2 AG

201700121   | eMail      | info@test2.de

201700092   | Nr           | 345

201700092   | Name     | Schröder UG

201700092   | eMail      | info@test3.de

201700092   | Ort          | Testhausen

201700092   | Telefon   | 0815 4711

 

In Tabelle1 wird eine eineindeutige FileId mit einer internen ID Verknüpft.

In Tabelle 2 gibt es zu jeder ModId diverse Indexwerte. Die Beschreibung/Überschrift des Indexwertes steht und Spalte "Name" und der zugehörige Wert in Value.

 

Ich muss nun versuchen eine View zu erzeugen, die mir gewünschte Feldwerte mit der FileId verknüpft und einen Datensatz zurück bringt.

Ich möchte z.B. nur Nr, Name und eMail aus allen möglichen Feldern zurück erhalten.

 

FileId      | Nr   | Name               |eMail

-----------------------------------------------------------------------

123456   | 123 | Test1 GmbH    | info@test1.de

234567   | 234 | Test2 AG         | info@test2.de

345678   | 345 | Test3 UG         | info@test3.de

 

 

Ich habe es wie folgt versucht, aber versage bei jeglichem Ansatz einen Wert aus dem System zu bekommen.

 

with FieldNames as (
    select 'Nr' union all
    select 'Name' union all
    select 'eMail' union all
)
select
    File.id AS 'FileId',
    Field.Name,
        (case when exists (select Field.Value
            from FieldNames FN
            where Field.Name like '%'+FN.Field+'%')
        end) 
FROM
    file AS File,
    field AS Field
WHERE
    AND field.modid = file.modid
GROUP BY 
    File.id

Gruß

hupe

 

 

 



#2 Dukel

Dukel

    Board Veteran

  • 9.253 Beiträge

 

Geschrieben 19. Juni 2017 - 18:38

Schaue dir einmal Joins an.


Stop making stupid people famous.