Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Pasar registros como columnas (https://www.clubdelphi.com/foros/showthread.php?t=92153)

elrayo76 10-08-2017 23:33:10

Pasar registros como columnas
 
Hola,

Tengo una consulta DE SQL Server que me devuelve N cantidad de registros (pueden ser mas o menos pero no son muchos). Lo que necesito es que esos registros se muestren en columnas.

Codigo Nombre
-------------------
1 aaa
2 bbb
3 ccc
8 ddd
9 eee
10 fff

lo que quiero hacer es que quede algo como esto

1 aaa 2 bbb 3 ccc 8 ddd 9 eee 10 fff
-------------------------------------------------

Esto que comento no lo puedo hacer con PIVOT ya que la cantidad de columnas que puedo llegar a tener puede varias. Si lo logran con PIVOT sera bienvenido pero yo no lo logre.

Saludos,
El Rayo

Casimiro Notevi 10-08-2017 23:40:33

¿Qué es "DE SQL Server"?

roman 11-08-2017 00:18:08

Cita:

Empezado por Casimiro Notevi (Mensaje 520175)
¿Qué es "DE SQL Server"?

"de SQL Server"

O sea, hecha con SQL Server.

// Tiquismiquis

elrayo76 11-08-2017 00:19:32

Así es que esta en el motor de base de datos SQL Server

Casimiro Notevi 11-08-2017 09:15:10

¡Ah!, MS sql server.

bucanero 11-08-2017 13:37:39

hola,

un ejemplo simple para el uso de PIVOT mostrando las ventas de los clientes desglosadas por meses es:

Código SQL [-]
SELECT cliente, nombre, [1] as enero, [2] as febrero, [3] as marzo, [4] as abril, [5] as mayo, [6] as junio, [7] as julio, [8] as agosto, [9] as septiembre, [10] as octubre, [11] as noviembre, [12] as diciembre
FROM (
  select cliente, clientes.nombre, month(fecha) as mes, importe
  from ventas
  inner join clientes on clientes.codigo=cliente 
) AS datos PIVOT (
  sum(importe)
  FOR mes IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS PivotTable
order by nombre;

para el caso en particular de una lista de datos se puede aplicar algo así:

Código SQL [-]
SELECT [1] as c1, [2] as c2, [3] as c3, [4] as c4, [5] as c5, [6] as c6, [7] as c7, [8] as c8, [9] as c9, [10] as c10, [11] as c11, [12] as c12
FROM (
  select 
      row_number() over(order by codigo) as num, 
      campo
  from tabla
) AS datos PIVOT (
  min(campo) 
  FOR num IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS PivotTable

Importante, creo una especie de indice para las filas numerandolas, y para la tabla pivot, no vale poner solamente el nombre del campo, hay que aplicar alguna función, así que con poner la función min() es suficiente, y como pega en el FOR hay que poner tantos números como lineas pueda tener los datos.

Espero te pueda ser util
Un saludo


La franja horaria es GMT +2. Ahora son las 08:25:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi