2016-07-15 18 views
0

Ich habe eine Master-Tabelle, die eine Zeile pro Schlüssel und eine Detail-Tabelle, die viele Zeilen pro Schlüssel mit einem Sequenzfeld, das eine Beschreibung hat Feld muss ich verkettet und eine Zeile pro Schlüssel erstellen. Mein Code tut das gut, aber die Detaildatenzeile enthält die verketteten Daten nicht in der richtigen Reihenfolge. Die Daten werden mir in einer Excel-Tabelle geliefert, und ich verwende den Import-Assistenten, um die Daten zur Datenbank hinzuzufügen. Da die Reihenfolge in den Detaildaten nicht korrekt ist, habe ich eine Unterauswahl hinzugefügt, um die Daten nach Schlüssel und Sequenznummer zu sortieren, die die Eingabe in STUFF WITH XML PATH ist. Ich bekomme immer noch die Daten in einer falschen Reihenfolge. Wenn ich die Daten zuerst in der Tabelle sortiere und sie dann in die Datenbank lade, funktioniert das gut. Ich brauche das wirklich, um dynamisch zu arbeiten, weil ich das an mein Team verteilen möchte, und wir können es für verschiedene Tabellen verwenden. Irgendwelche Ideen, warum die Unterauswahl mit dem STUFF FOR XML PATH nicht funktioniert? Wie kann ich tun, was ich brauche? HierWie bekomme ich SQL-Abfrage mit Join und Verwendung von STUFF und FOR XML PATH korrekt sortiert werden

ist der Code, den ich habe:

SELECT pic, pisc, piin 
    , STUFF((SELECT ' ' + P.PIIDTA FROM PI115AP P 
    Where P.PIC =B.PIC 
    and P.PISC = B.PISC 
    and P.PIIN = B.PIIN FOR XML PATH(''), type 
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail 
    From 
    (select TOP 100 PERCENT 
     pic, pisc, piin, piisn, piidta 
    from PI115AP 
    order by pic, pisc, piin, piisn) B 
    Group By B.PIC, B.pisc, B.piin 

Thank you!

+0

Können Sie bitte zeigen, was Ihre Abfrage Ihnen derzeit gibt und was Ihre erwartete Ausgabe ist. – TheGameiswar

+0

#TheGameiswar - Das Problem tritt nur auf, wenn sich Zeilen zwischen den sequentiellen Zeilen befinden. Die Detaildaten sind über 15.000 Zeilen und ich und die – Cass

+0

Sorry #TheGameiswar - Das Problem tritt nur auf, wenn sich zwischen den Reihen Reihen befinden. Zum Beispiel kann ich 200 072 00002 1 PERM haben. DRÜCKEN SIE; 7 UNBRACHBARER KNOPF e01 006 00003 1 EINIGE TEXT weitere Zeilen ... 200 072 00002 2 FRONT; ZWEI TASCHEN, EINE FALSCHE & weitere Zeilen Die kombinierten Daten haben seq 3, seq1, seq5, geordnet nach dieser. Das Ergebnis sollte Seq 1 Daten, Seq2 Daten, usw. sein. Ich habe bei einem Kommentar einen begrenzten Platz, also habe ich das komprimiert, ich denke, es macht Sinn. – Cass

Antwort

0

Sie haben viele Teile und Teile fehl am Platz, damit dies so funktioniert, wie Sie es möchten. Ihr FOR XML ist nicht in der von Ihnen gewünschten Reihenfolge, da die Unterabfrage keine Reihenfolge aufweist. Die tatsächliche Ergebnismenge ist nicht in der von Ihnen gewünschten Reihenfolge, da die Hauptabfrage keine Reihenfolge aufweist. Ich verstehe den Punkt der B-Unterabfrage nicht wirklich. Das Top sortiert NICHT die tatsächlichen Ergebnisse, wenn Top verwendet wird, es definiert nur, welche Zeilen abgerufen werden sollen.

Ziemlich sicher, dass Sie etwas mehr so ​​wollen.

SELECT pic 
    , pisc 
    , piin 
    , STUFF((SELECT ' ' + P.PIIDTA 
      FROM PI115AP P 
      Where P.PIC = B.PIC 
       and P.PISC = B.PISC 
       and P.PIIN = B.PIIN 
      order by p.pic 
       , p.pisc 
       , p.piin 
       , p.piisn 
      FOR XML PATH(''), type 
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail 
From PI115AP B 
Group By B.PIC 
    , B.pisc 
    , B.piin 
order by b.pic 
    , b.pisc 
    , b.piin 
+0

#Sean Lange, Danke für die Antwort. Ich habe eine Reihenfolge y in by sub auswählen. Dies ist die Sub-Abfrage: wählen TOP 100 PROZENT pic, pisc, piin, piisn, piidta von PI115AP Reihenfolge von pic, pisc, piin, piisn Und Ihr Code gibt mir die folgende Fehlermeldung: Msg 8127 , Ebene 16, Status 1, Zeile 24 Die Spalte "PI115AP.PIISN" ist in der ORDER BY-Klausel ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. – Cass

+0

Ihre Unterabfrage mit STUFF hat KEINE Bestellung von. Ich kann die Abfrage, die ich gepostet habe, nicht wirklich testen, weil ich nichts damit zu tun habe. Ich habe das blind geschrieben. –

+0

#Sean Lange, die Sub-Abfrage in Sachen kann nicht die Reihenfolge haben, weil die piisn nicht auf der Auswahl ist und nicht sein kann. Ich brauche die Daten mit den drei anderen Felder-Ebene verkettet. Was ich nicht bekommen, ist die Sub-Abfrage (wählen TOP 100 PROZENT pic, pisc, piin, piisn, piidta von PI115AP Reihenfolge von pic, pisc, piin, piisn) die Daten in der richtigen Reihenfolge zurückgibt . Ich dachte, das wäre der Feed für die STUFF-Abfrage, aber das STUFF bringt es nicht in die richtige Reihenfolge. – Cass