Laden...

Daten aus mehreren Tabellen in XML zusammenführen

Erstellt von Anna85 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.311 Views
Thema geschlossen
A
Anna85 Themenstarter:in
59 Beiträge seit 2019
vor 4 Jahren
Daten aus mehreren Tabellen in XML zusammenführen

verwendetes Datenbanksystem: <MSSQL>
Guten Morgen,
ich habe 3 Tabellen angelegt, die ich über pk verknüpfen kann. Ich kann eine xml Datei bauen aufgrund von der mehreren Tabelle, was ich auch gemacht habe.
Nun habe ich ein Dilema; es gibt 3 Tabellen: in eine Tabelle gibt es mehrere Datensätze zu einem Nummer, also wenn ich sie nach * abfrage habe ich Antwort:


123, 256x
123, 456a
124, 101

Wenn ich meine Abfrage starte:


SE [ds-result_fis];

select top 100 
    
kaufnr as '@id',
      'produktnr' as '@type',                     
        pro1 as 'v1:pro/v1:title',
       pro2 as 'v1:zusatzpro/v1:title'
       from [tab1]
         FROM [zdb] 
            
            inner join kaufnr 
            on tab1.kaufnr=tab2.kaufnr
          
FOR XML PATH('v1:journal'), ROOT('v1:journals')

Als Antwort bekomme ich, was auch richtig ist:

<journal>
<v1:produktnr id="010014802">
    <v1:pros>
      <v1:pro>taschenbuch bronze</v1:title>
    </v1:pros>
      <v1:tels>
      <tel>256x</tel>
    </v1:tels>
    <v1:land>
      <annotation>
        <documentation>DE</documentation>
      </annotation>
    </v1:land>
  </v1:journal>
  <v1:journal id="010014802">
    <v1:pros>
      <v1:pro>taschenbuch bronze</v1:title>
    </v1:pros>
      <v1:tels>
      <tel>456a</tel>
    </v1:tels>
    <v1:land>
      <annotation>
        <documentation>DE</documentation>
      </annotation>
    </v1:land>
  </v1:journal>

Allerdings möchte ich, dass die XML Datei so aussieht, als Lösung;

<journal>
<v1:produktnr id="010014802">
    <v1:pros>
      <v1:pro>taschenbuch bronze</v1:title>
    </v1:pros>
      <v1:tels>
      <tel>256x</tel>
     </v1:tels>
      <tel>456a</tel>
    </v1:tels>
       <v1:land>
      <annotation>
        <documentation>DE</documentation>
      </annotation>
    </v1:land>
  </v1:journal>

Ich habe mich belsen, dass ich hier Case Fkt einbauuen kann.
Ich weiß, bekomme ich hier keine Lösung, nun vielleicht ein Tip, wo ich das einbauen kann?

Danke im Voraus!

Anna

4.942 Beiträge seit 2008
vor 4 Jahren

Dann benötigst du wohl einen (SELF)JOIN, welcher zuerst die Daten gruppiert (group by) und dann für jedes Element der Gruppe die weiteren Daten ausliest.

A
Anna85 Themenstarter:in
59 Beiträge seit 2019
vor 4 Jahren

Hi, ich habe eine Verkettung auch in meine Abfrage unsprünglich eingebaut:
Allerdings die XML sah so aus:

<journal>
<v1:produktnr id="010014802">
    <v1:pros>
      <v1:pro>taschenbuch bronze</v1:title>
    </v1:pros>
      <v1:tels>
      <tel>256x,456a</tel>
     </v1:tels>
       <v1:land>
      <annotation>
        <documentation>DE</documentation>
      </annotation>
    </v1:land>
  </v1:journal>

An sich richtig hat funktioniert, aber nach meine Musskriterien muss so aussehen:

<journal>
<v1:produktnr id="010014802">
    <v1:pros>
      <v1:pro>taschenbuch bronze</v1:title>
    </v1:pros>
      <v1:tels>
      <tel>256x</tel>
     </v1:tels>
   <zusatztel>
      <tel>456a</tel>
    </zusatztel>
       <v1:land>
      <annotation>
        <documentation>DE</documentation>
      </annotation>
    </v1:land>
  </v1:journal>

Es bedeutet, ich muss dem Programm sagen:
wenn zu einem Produkt kein tel vorhanden, Ende, geh weiter
Wenn zu einem Produkt ein tel vorhanden: trage es in Element zusatztel ein
wenn zu einem Produkt zweite tel vorhanden: trage es in Element zusatztel ein prüfe weiter.

Habe ich mein Dilema deutlich erzählt?

Ein Link/Tip wird mir von euch wieder wahrscheinlich helfen.
Danke, Anna

A
Anna85 Themenstarter:in
59 Beiträge seit 2019
vor 4 Jahren

Ich werde sehr dankbar, wenn mir jemand helfen könnte!

5.658 Beiträge seit 2006
vor 4 Jahren

Es hat keinen Zweck, gleich zu pushen, wenn du nach zwei Stunden keine Antwort bekommst. Siehe [Hinweis] Wie poste ich richtig?, Punkt 7.

Wenn du keine Antwort bekommst, liegt es meistens daran, daß du das Problem nicht verständlich genug beschrieben hast. Mir z.B. ist nicht klar, ob sich dein Problem eher auf das SQL oder auf das XML bezieht.

Außerdem hat dir Th69 bereits eine Antwort gegeben. Wenn dir das nicht weiterhilft, kannst du mal genauer erklären, warum nicht.

Weeks of programming can save you hours of planning

A
Anna85 Themenstarter:in
59 Beiträge seit 2019
vor 4 Jahren

Außerdem hat dir Th69 bereits eine Antwort gegeben. Wenn dir das nicht weiterhilft, kannst du mal genauer erklären, warum nicht.

Oben habe ich beschrieben, warum es nicht funktioniert. Wenn ich join und group by einbaue die Datei sieht so aus:

<journal>
<v1:produktnr id="010014802">
    <v1:pros>
      <v1:pro>taschenbuch bronze</v1:title>
    </v1:pros>
      <v1:tels>
      <tel>256x,456a</tel>
     </v1:tels>
       <v1:land>
      <annotation>
        <documentation>DE</documentation>
      </annotation>
    </v1:land>
  </v1:journal>

und es soll aussehen:

<journal>
<v1:produktnr id="010014802">
    <v1:pros>
      <v1:pro>taschenbuch bronze</v1:title>
    </v1:pros>
      <v1:tels>
      <tel>256x</tel>
     </v1:tels>
   <zusatztel>
      <tel>456a</tel>
    </zusatztel>
       <v1:land>
      <annotation>
        <documentation>DE</documentation>
      </annotation>
    </v1:land>
  </v1:journal>

In meine Abfrage muss ich noch was einabeun, aber weiss ich nicht was. Deshalb bin ich im Forum geladnet, da hier man Tipps bekommen kann.

5.658 Beiträge seit 2006
vor 4 Jahren

Ist das nicht exakt das gleiche XML, das du oben schonmal gepostet hast? Hast du deine Abfrage überhaupt angepaßt? Wieso postest überhaupt nur das XML, wenn das Problem doch offenbar in der SQL-Abfrage liegt?

Weeks of programming can save you hours of planning

Hinweis von MrSparkle vor 4 Jahren

Geschlossen wegen Crosspost: https://www.computerbase.de/forum/threads/xml-aus-tabellen-erstellen.1906143/

Bitte beachte zukünftig [Hinweis] Wie poste ich richtig?

Thema geschlossen