2016-07-19 11 views
1

Im Moment habe ich diese Daten:Concatenate SQL-Strings basierend auf

appointment_num order_num modified_proc_desc 
"124"    "1" "DIVISION OF PENILE SKIN BRIDGE" 
"125"    "1" "CIRCUMCISION" 
"126"    "1" "BILATERAL INGUINAL EXPLORATION" 
"126"    "2" "BILATERAL INGUINAL HERNIA/HYDROCELE REPAIR" 
"126"    "3" "POSSIBLE RIGHT ORCHIOPEXY" 
"127"    "1" "EXCISION SCALP CYST" 
"128"    "1" "REPAIR INCOMPLETE CIRCUMCISION" 
"129"    "1" "CIRCUMCISION" 

Hergestellt aus dieser Tabelle/Abfrage:

SELECT [appointment_num] 
     ,[order_num] 
     ,[modified_proc_desc] 
FROM [adv].[dbo].[as_appointment_procs] 

ich modified_proc_desc Felder miteinander verbinden können, basierend auf den gleichen order_num mit XML PATH mit (''). Ich muss in der Lage sein, sie nacheinander zu verbinden. Zum Beispiel möchte ich für die oben genannte Bestellnummer "126" die Zeichenketten modified_proc_desc der Bestellnummer 1, 2 und 3 in einem neuen Feld case_procedure verketten. Mit anderen Worten, ich möchte nur einen Termin mit allen Aufträgen anzeigen.

Kann mir hier jemand in die richtige Richtung zeigen? Hier ist ein Beispiel für die Ausgabe:

appointment_num order_num case_procedure 
"124"    "1" "DIVISION OF PENILE SKIN BRIDGE" 
"125"    "1" "CIRCUMCISION" 
"126"    "1" "BILATERAL INGUINAL EXPLORATION, BILATERAL INGUINAL HERNIA/HYDROCELE REPAIR, POSSIBLE RIGHT ORCHIOPEXY" 
"127"    "1" "EXCISION SCALP CYST" 
"128"    "1" "REPAIR INCOMPLETE CIRCUMCISION" 
"129"    "1" "CIRCUMCISION" 
+0

hilft das? http://stackoverflow.com/questions/8631210/group-concat-order-by –

+0

http://stackoverflow.com/questions/38285250/concatenate-fields-in-order-sql-server/38285399 # 38285399 – TheGameiswar

+1

Lesen Sie diese Prozeduren haben mich gequetscht ... – HardCode

Antwort

1

Eine Möglichkeit ist ein Inline-Unterabfrage zu erstellen, um die Werte in einer Zeile zu kombinieren:

SELECT DISTINCT 
    appointment_num, 
    STUFF(
     (SELECT ', ' + p2.modified_proc_desc 
     FROM as_appointment_procs p2 
     WHERE p2.appointment_num = p.appointment_num 
     ORDER BY p2.order_num 
     FOR XML PATH(''), type).value('(./text())[1]','varchar(max)') 
     ,1,2,'') AS case_procedure 
FROM as_appointment_procs p 

Der STUFF Befehl entfernt die führende Komma.

+0

Ich würde vorschlagen, wählen Sie hier SELECT_NORM.GROUP BY terminal_num' anstelle von 'SELECT DISTINCT termination_num ...' wegen der Reihenfolge der Verarbeitung. Wenn Sie 'GROUP BY' verwenden, entfernt es zuerst die Duplikate und führt dann die Unterabfrage für jeden eindeutigen Wert von 'termination_num' aus, während' DISTINCT' die Unterabfrage einmal für jede Zeile auswertet und danach die Duplikate entfernt. Es mag keinen signifikanten Unterschied machen, aber dann könnte es wieder und jedes bisschen hilft. – GarethD

+0

Danke, das ist genau das, was ich gesucht habe. Danke für die Ausbildung. Ich werde auch die Antwort von GarethD hier anschauen. – drichburg