2012-07-09 16 views
5

Quiero dividir el resultado de una sola columna de una consulta en 4 columnas:SQL sola columna dividida sobre mutiple columnas

fuente de la muestra: (Select [FirstName from User)
Peter
María
John
Tina
Carl
Jane
Bill
Sarah

quiero tener este aspecto:

Column1 Column2 Column3 Column4 
Peter  Mary  John  Tina 
Carl  Jane  Bill  Sarah 

Respuesta

8

Es necesario tener una columna única al ORDER BY para obtener resultados deterministas, pero algo en esta línea debería funcionar.

;WITH T 
    AS (SELECT [FirstName], 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1)/4 AS Row, 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1) % 4 AS Col 
     FROM [User]) 
SELECT [0] AS Column1, 
     [1] AS Column2, 
     [2] AS Column3, 
     [3] AS Column4 
FROM T PIVOT (MAX(name) FOR Col IN ([0], [1], [2], [3])) P 
ORDER BY Row 
+0

+1, pero creo que row_number() para Col también necesita '-1'. –

+0

¡Gracias! Lo hice funcionar usando 4 tablas temporales con diferentes módulos y uniéndome a rownums, ¡pero el CTE se ve mejor! – callisto

+0

@ NikolaMarkovinović - Es cierto, o las necesidades de alias cambiadas a medida que sale '1,2,3,0,1,2,3,0'. Editado según su sugerencia. –

1

Aquí tienes un montón de opciones, buscar el uno es más adecuado para su caso: Create columns from list of values

enlace anterior dirige a even more information

+0

He echado un vistazo al enlace, pero solo muestra cómo construir una sola columna que contenga varios valores de filas. Quiero dividir 1 columna en 4 columnas – callisto

+0

Sí, tienes razón, acabo de editar mi respuesta, tal vez debería ser un comentario y no una respuesta completa, ya que los enlaces proporcionados te dan mucha información pero no la respuesta exacta a tu pregunta. – Yaroslav

Cuestiones relacionadas