2016-07-21 9 views
0

Ich habe drei Tabellen, die verschiedene Arten von Daten nach einem Zulassungsprozess speichern.Wie mehrere Zeilen aus drei Tabellen in einer einzigen Zeichenfolge in SQL kombinieren?

Die erste Tabelle ([dbo]. [Inscripciones_Pregrado]) speichert die grundlegenden Kontaktinformationen des zukünftigen Studenten. Die zweite Tabelle ([dbo]. [Checklist_Documentos]) speichert die Namen und IDs für die Dokumente, die der Student haben muss, um den Aufnahmeprozess abzuschließen. Die dritte Tabelle ([dbo]. [Checklist_Pregrado]) speichert die Dokumente, die der Student effektiv in die Zulassungsstelle gebracht hat.

Ich muss diese Informationen kombinieren, damit wir eine Excel-Datei exportieren können, die alle Kontaktinformationen und die Checkliste für jeden Schüler enthält.

So lassen Sie uns Tabelle 1 haves 4 Aufzeichnungen sagen:. [dbo] [Inscripciones_Pregrado]

enter image description here

Die zweite Tabelle (. [Dbo] [Checklist_Documentos]) haves acht Aufzeichnungen, verschiedene Arten von angeforderten Dokumente: enter image description here

Und die dritte Tabelle (. [dbo] [Checklist_Pregrado]) haves 16 Datensätze:

enter image description here

Was ich brauche, ist, dass diese drei Tabellen kombiniert erhalten nach der ID des Aspiranten:

enter image description here

Bisher habe ich auf verschiedene Arten von Codes versucht haben:

Code 1

SELECT 
    [dbo].[Inscripciones_Pregrado].[ID], 
    [dbo].[Inscripciones_Pregrado].[Name], 
    [dbo].[Inscripciones_Pregrado].[ProgramID], 
    [dbo].[Checklist_Documentos].[Document] 
FROM [dbo].[Inscripciones_Pregrado] 

INNER JOIN 
    [dbo].[Checklist_Pregrado] 
    ON [dbo].[Checklist_Pregrado].[IdForm] = [dbo].[Inscripciones_Pregrado].[ID] 

INNER JOIN 
    [dbo].[Checklist_Documentos] 
    ON [dbo].[Checklist_Documentos].[ID] = [dbo].[Checklist_Pregrado].[IdDoc] 

Dieses pro jedes Dokument eine Zeile bekommt, so sind der Name und andere Aufzeichnungen wiederholt sich nach der Anzahl der Dokumente, die der Aspirant auf seiner Mappe hat.

-Code 2

SELECT 
    [dbo].[Inscripciones_Pregrado].[ID], 
    [dbo].[Inscripciones_Pregrado].[Nombres], 
    [dbo].[Inscripciones_Pregrado].[Apellido1], 
    (STUFF((SELECT CAST(', ' + [dbo].[Checklist_Pregrado].[IdDocumento] AS varchar(max)) 
     FROM [dbo].[Checklist_Pregrado] 
     WHERE([dbo].[Inscripciones_Pregrado].[ID] = [dbo].[Checklist_Pregrado].[IdForm]) 
     FOR XML PATH ('')), 1, 2, '')) AS [Docs] 
FROM [dbo].[Inscripciones_Pregrado] 

Dieser Code gets und Fehler: Fehler bei der Konvertierung, wenn die varchar Wert Umwandlung '' in den Datentyp int.

Ich schätze all Ihre Hilfe und Kommentare.

Dank

+0

Statt Bilder können Sie aktuelle ddl und Beispieldaten in einem Format Verbrauchs posten? https://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

Antwort

1

Für Ihre Code 2, können Sie den Fehler beheben, indem Sie die Sie tun, um die Verkettung CASTvor tun.

Mit anderen Worten:

(STUFF((SELECT ', ' + CAST([dbo].[Checklist_Pregrado].[IdDocumento] AS varchar(max)) 
+0

Vielen Dank dafür, ich habe es nicht bemerkt. Um die Anfrage abzuschließen, habe ich einen inneren Join hinzugefügt, so dass die dritte Tabelle den Dokumentnamen und nicht nur die ID bringen würde ... – epaezr

1

@tab Alleman gab mir den Hinweis auf die Antwort, habe ich nicht, dass Fehler in der Schrift bemerkt. Es löste das Problem, aber der Code würde nur die ID des Dokuments aus der zweiten Tabelle ([dbo]) bringen.[Checklist_Documentos]) So fügte ich ein INNER JOIN, um die Daten zu kombinieren:

SELECT 
    [dbo].[Inscripciones_Pregrado].[ID], 
    [dbo].[Inscripciones_Pregrado].[Nombres], 
    [dbo].[Inscripciones_Pregrado].[Apellido1], 
    (STUFF((SELECT ', ' + CAST([dbo].[Checklist_Documentos].[Documento] AS varchar(max)) 
     FROM [dbo].[Checklist_Pregrado] 
     INNER JOIN 
      [dbo].[Checklist_Documentos] 
      ON [dbo].[Checklist_Documentos].[ID] = [dbo].[Checklist_Pregrado].[IdDocumento] 
     WHERE([dbo].[Inscripciones_Pregrado].[ID] = [dbo].[Checklist_Pregrado].[IdForm]) 
     FOR XML PATH ('')), 1, 2, '')) AS [Docs] 
FROM [dbo].[Inscripciones_Pregrado]