Transformar filas en columnas

20/07/2005 - 18:45 por Tomás | Informe spam
Hola a todos.

Supongo que esta consulta ya se habrá realizado antes, pero he buscado
información y no consigo resolver lo que necesito, que por otra parte no se
si será posible.

Tengo la siguiente tabla:
CREATE TABLE [P] (
[Codigo] [char] (12) ,
[Mes] [int] ,
[Importe] [numeric](18, 2) ,
CONSTRAINT [PK_P] PRIMARY KEY NONCLUSTERED ([Codigo],[Mes]) ON [PRIMARY]
) ON [PRIMARY]

Con la siguiente información:
INSERT INTO [dbo].[P] VALUES('6000000',4,100.00)
INSERT INTO [dbo].[P] VALUES('6000000',6,100.00)
INSERT INTO [dbo].[P] VALUES('6000000',8,100.00)
INSERT INTO [dbo].[P] VALUES('6100000',1,500.00)
INSERT INTO [dbo].[P] VALUES('6100000',2,500.00)
INSERT INTO [dbo].[P] VALUES('6100000',3,500.00)
INSERT INTO [dbo].[P] VALUES('6200000',1,1000.00)
INSERT INTO [dbo].[P] VALUES('6200000',2,1000.00)
INSERT INTO [dbo].[P] VALUES('6200000',3,1000.00)

Y así, unos cuantos miles de registros.

Y quisiera obtener un informe con la siguiente cabecera:
CODIGO MES-1 MES-2 MES-3 MES-4 MES-5 MES-6 MES-7 MES-8 MES-9 MES-10 MES-11
MES-12 TOTAL

6000000 0 0 0 100.00 0 100.00
0 100.00 0 0 0 0 300.00
6100000 500.00 500.00 500.00 0 0 0
0 0 0 0 0 0 1,500.00
6200000 1,00.00 1,000.001,000.00 0 0 0 0
0 0 0 0 0 3,000.00

En este ejemplo se mostraría cero en aquellas columnas que no hay datos en
la tabla para el mes correspondiente.

Cualquier idea será bienvenida.

Gracias por anticipado.

Tomás.
 

Leer las respuestas

#1 Eleazar
20/07/2005 - 19:10 | Informe spam
IZU! seria una buena noticia si existe alguna instruccion en sql, puesto que
yo lo resolvi a mano
1.- crear una tabla temporal tal como sera el resultado( CODIGO MES-1 MES-2
MES-3 MES-4 MES-5 MES-6 MES-7 MES-8 MES-9 MES-10 MES-11 MES-12 TOTAL)
2.- insertar solo el codigo mes en la tabla temporal
3.- actualizar los meses (de la tabla temporal) columna por columna

"Tomás" escribió en el mensaje
news:
Hola a todos.

Supongo que esta consulta ya se habrá realizado antes, pero he buscado
información y no consigo resolver lo que necesito, que por otra parte no


se
si será posible.

Tengo la siguiente tabla:
CREATE TABLE [P] (
[Codigo] [char] (12) ,
[Mes] [int] ,
[Importe] [numeric](18, 2) ,
CONSTRAINT [PK_P] PRIMARY KEY NONCLUSTERED ([Codigo],[Mes]) ON [PRIMARY]
) ON [PRIMARY]

Con la siguiente información:
INSERT INTO [dbo].[P] VALUES('6000000',4,100.00)
INSERT INTO [dbo].[P] VALUES('6000000',6,100.00)
INSERT INTO [dbo].[P] VALUES('6000000',8,100.00)
INSERT INTO [dbo].[P] VALUES('6100000',1,500.00)
INSERT INTO [dbo].[P] VALUES('6100000',2,500.00)
INSERT INTO [dbo].[P] VALUES('6100000',3,500.00)
INSERT INTO [dbo].[P] VALUES('6200000',1,1000.00)
INSERT INTO [dbo].[P] VALUES('6200000',2,1000.00)
INSERT INTO [dbo].[P] VALUES('6200000',3,1000.00)

Y así, unos cuantos miles de registros.

Y quisiera obtener un informe con la siguiente cabecera:
CODIGO MES-1 MES-2 MES-3 MES-4 MES-5 MES-6 MES-7 MES-8 MES-9 MES-10


MES-11
MES-12 TOTAL


-
6000000 0 0 0 100.00 0 100.00
0 100.00 0 0 0 0 300.00
6100000 500.00 500.00 500.00 0 0 0
0 0 0 0 0 0 1,500.00
6200000 1,00.00 1,000.001,000.00 0 0 0


0
0 0 0 0 0 3,000.00

En este ejemplo se mostraría cero en aquellas columnas que no hay datos en
la tabla para el mes correspondiente.

Cualquier idea será bienvenida.

Gracias por anticipado.

Tomás.


Preguntas similares