2017-12-22 3 views
1

Ich bin zu verwenden, wie MySQL mit Group_Concat arbeitet, so Schwierigkeiten zu verstehen, wie SQL Server mit Group Concat funktioniert. Ich kann nicht gruppieren nur durch PPNumber für die xml path Gruppierung, da ich den Bx Wert auswähle.SQL Server - Gruppe von gibt die gleichen Informationen zurück

Gibt es eine Möglichkeit, die begrenzte Auflistung von Bx zu machen Gruppe auf den pp.[PPNumber] as PartNumber Spaltenwerte basierten oder gibt es einen besseren Weg, um die Bxs zu einer Gruppe von PPNumber Spalt innerhalb der xml path Gruppierung nur zu bekommen?

SELECT 
pp.[PPNumber] as PartNumber, 
COUNT(PSN) as ActualCount, 
replace((SELECT b.Bx AS [data()] 
     FROM def.dbo.[boxes] b 
     Group By b.[PPNumber] ,b.Bx 
     ORDER BY b.Bx 
     FOR xml path('')), ' ', ',') as Bxs 

FROM def.dbo.[packtable] p 
JOIN (SELECT Bx, [PPNumber] FROM def.dbo.[boxes] WHERE (CONCAT(Completed, ' 
    ', CompletedTime) > @sDate AND CONCAT(Completed,' ', CompletedTime) < 
    @eDate)) b on p.Bx= b.Bx 
JOIN def.dbo.[PPNumlist] pp on b.[PPNumber] = pp.[PPNumber] 

GROUP BY pp.[PPNumber] 
ORDER BY pp.[PPNumber] ; 

enter image description here

+2

Es würde helfen, wenn Sie einige Beispieldaten posten könnten, da es sehr schwierig ist, von Ihren Resultaten und von sql-Anweisung zurückzuentwickeln. Ich vermute, das Problem ist, dass die Unterabfrage in Ihrer SELECT-Klausel nicht mit der Hauptabfrage korreliert ist (keine Beziehung zwischen 'def.dbo.boxes' in der WHERE-Klausel Ihrer Unterabfrage mit den beiden Tabellen der Hauptabfrage). Ich vermute auch, dass die Unterabfrage unnötig ist, da Sie bereits der Boxentabelle beigetreten sind. Beispieldaten würden jedoch helfen, dies zu klären. – JNevill

+0

Die Beispieldaten befinden sich im Bild. Welche anderen Informationen sollte ich dann bereitstellen, um zu helfen? @JNevill – narue1992

+0

@JNevill fragt Sie, dass Sie eine Stichprobe von dem, was Sie beginnen, und nicht nur das Ergebnis (s), die Sie suchen. Wenn Sie die Abfrage ohne den Kontext betrachten, wird die Aufgabe viel schwieriger. –

Antwort

1

@JNevil metioned die Unterabfrage nicht auf die Hauptabfrage korreliert wurde. Dem stimme ich zu, aber ich wusste nicht, wie ich am besten vorgehen sollte. Ich habe jedoch mit einer Funktion getestet und es hat richtig funktioniert.

Alles, was ich tat, war in der PN und Datumsbereiche übergeben und es hat funktioniert!

SELECT 
pp.[PPNumber] as PartNumber, 
COUNT(PSN) as ActualCount, 
def.dbo.udf_Get_PackedBoxListByPN(pp.[PPNumber], @sDate,@eDate) as Bxs