que pasar multiples funcion filas ejemplo dinamicas convertir con columnas agregado sql-server-2008 pivot transpose

sql-server-2008 - pasar - pivot}sql server ejemplo



Columnas dinámicas pivote, sin agregación (1)

Sí, puedes realizar un pivote dinámico. A veces es más fácil trabajar con la consulta PIVOT usando una versión estática primero para que pueda ver cómo aparecerá la consulta y los resultados. Luego transforma la consulta en una versión dinámica.

Aquí hay un ejemplo de una versión estática vs. dinámica de una consulta:

Estático ( 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

Dinámico ( 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)

Si puede proporcionar más detalles sobre su estructura de tabla actual y algunos datos de muestra. Deberíamos poder ayudarlo a crear la versión que necesitaría para su situación.

Sin embargo, como dije antes, a veces es más fácil comenzar con una versión estática, donde codifica las columnas que necesita transformar primero, luego pasa a la versión dinámica.

Tengo datos del cuestionario en SQL Server 2008, que quiero transponer a una matriz.
Vi varias publicaciones sobre el mismo tema, pero simplemente no me hago pivotar.

Se dan las siguientes tablas:

Question table

Answer table

Customer table

Las columnas:
[CustomerID] , [QuestionName_1] , .., [QuestionName_n] <- número dinámico de columnas de preguntas)
Los datos:
CustomerID , Answer_1 , .., Answer_n

El código para recuperar las columnas:

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)

La idea de consulta inicial se tomó de pivots con columnas dinámicas .

¿Se puede hacer y cómo sería la consulta pivotante?
ps: no quiero usar la clasificación con un número máximo de columnas.

Saludos,

Michel