Pivot Dynamic Columns, no Aggregation

Ho dati del questionario in, SQL Server 2008, che voglio trasporre in una matrice.
Ho visto diversi post sullo stesso argomento, ma non riesco a farmi girare.

Date sono le seguenti tabelle:

Question table

Answer table

Customer table

Le colonne:
[CustomerID] , [QuestionName_1] , .., [QuestionName_n] <- numero dinamico di colonne di domande)
I dati:
CustomerID , Answer_1 , .., Answer_n

Il codice per recuperare le colonne:

 DECLARE @columns VARCHAR(8000) SELECT @columns = COALESCE(@columns + ',[' + cast(QuestionName as varchar) + ']', '[' + cast(QuestionName as varchar)+ ']') FROM Answer A INNER JOIN Question Q ON A.QuestionID = Q.QuestionID INNER JOIN Customer C ON A.CustomerID = C.CustomerID GROUP BY Q.QuestionName SET @columns = '[CustomerID],' + @columns DECLARE @query VARCHAR(8000) SET @query = 'Some PIVOT query without aggregation' EXECUTE(@query) 

L’idea di query iniziale è stata presa da pivot con colonne dinamiche .

Può essere fatto e come apparirebbe la query pivot?
ps: non voglio usare la classifica con un numero massimo di colonne.

Saluti,

Michel

    Sì, puoi eseguire un pivot dinamico. A volte è più semplice elaborare la query PIVOT utilizzando prima una versione statica in modo da poter vedere come appariranno la query e i risultati. Quindi trasforma la query in una versione dynamic.

    Ecco un esempio di una versione statica rispetto a una query dynamic:

    Statico ( SQL Fiddle ):

     select * from ( select u.userid, u.fname, u.lname, u.mobile, r.question, r.choice from users u left join results r on u.questionid = r.questionid and u.choiceid = r.choiceid ) x pivot ( min(choice) for question in([are you], [from]) ) p 

    Dinamica ( SQL Fiddle ):

     DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) FROM results c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from ( select u.userid, u.fname, u.lname, u.mobile, r.question, r.choice from users u left join results r on u.questionid = r.questionid and u.choiceid = r.choiceid ) x pivot ( min(choice) for question in (' + @cols + ') ) p ' execute(@query) 

    Se è ansible fornire maggiori dettagli sulla struttura attuale della tabella e quindi alcuni dati di esempio. Dovremmo essere in grado di aiutarti a creare la versione di cui avresti bisogno per la tua situazione.

    Come ho già detto, a volte è più facile iniziare con una versione statica, in cui si codifica in modo rigido nelle colonne che è necessario trasformare prima, quindi passare alla versione dynamic.