Halten Sie die Spalte horizontal zurück

Ich habe eine Tabelle in SQL server, die eine list von Fragen und Antworten aus einer Umfrage auf unserer Website speichert. Es ist ein ziemlich Standard-Layout, hier ist, wie es die abgeschlossenen Umfragen speichert:

Name Question Answer James Smith What is your address? 23 Duck Ln. James Smith How old are you? 48 James Smith Do you have a job? yes Sarah Murphy What is your address? 44 West St. Sarah Murphy How old are you? 23 Sarah Murphy Do you have a job? no Jack Western What is your address? PO Box 17 Jack Western Do you have a job? yes 

Wie Sie sehen können, ist es schwer, die data zu lesen, sobald ein paar Umfragen abgeschlossen sind. Ich muss die Werte horizontal zurückgeben, mit einer Person, die jeweils nur eine Zeile die erste Spalte hat, die den Namen der Person enthält, wobei die anderen Zeilen jeweils eine Frage als Header enthalten und die Antwort darauf. Hier ist, wie die Abfrage Werte zurückgeben sollte:

 Name What is your address? How old are you? Do you have a job? James Smith 23 Duck Ln. 48 yes Sarah Murphy 44 West St. 23 no Jack Western PO Box 17 yes 

Ist das möglich? Übrigens, ich sende nur ein paar der Fragen – es wird viel größer, wenn es 10+ Fragen auf der Website gefragt.

Danke für Ihre Hilfe!

Bearbeiten:

Bitte konzentriere dich nicht darauf, ob die Aufzeichnungen in der Applikationsebene analysiert werden sollen oder nicht. Ich möchte letztlich die Ausgabe in R verwenden, die nicht einmal entworfen ist, um große datasätze zu behandeln.

Wenn Sie dies in SQL ausführen möchten, da Sie SQL server verwenden, können Sie die PIVOT-function verwenden, um die data von Zeilen in Spalten umzuwandeln:

 select name, [What is your address?], [How old are you?], [Do you have a job?] from yourtable pivot ( max(answer) for question in ([What is your address?], [How old are you?], [Do you have a job?]) ) piv; 

Siehe SQL Fiddle mit Demo .

Wenn du unbekannte Werte hast, dann kannst du dynamisches SQL verwenden, um die Lösung zu bekommen:

 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Question) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT name, ' + @cols + ' from yourtable pivot ( max(answer) for Question in (' + @cols + ') ) p ' execute sp_executesql @query; 

Siehe SQL Fiddle mit Demo