Urgente ! Referencias Cruzadas en sql server

15/06/2004 - 10:57 por JFBM | Informe spam
Hola!!

Pues me gustaria realizar una consulta de referencias
cruzadas en sql server.

tengo una tabla: clientes
cdg-cli
apellido1
apellido2

tabla cabecera de albaranes
numerodocumento
cdg-cli (llave ext)

tabla linea de albaranes:

numerodocument
pvp
neto
costo


pues me gustaria sacar los neto y costos de todos los
clientes cada mes desde 1/1/2004 al 1/06/2004

En Access hbia exo solo para los netos con la sentencia:

TRANSFORM Sum([pro1_rhiscab Consulta].[Suma De RHML-
prevta]) AS [SumaDeSuma De RHML-prevta]
SELECT [pro1_rhiscab Consulta].[GCLI-clialm],
[pro1_rhiscab Consulta].[GCLI-apel1], [pro1_rhiscab
Consulta].[GCLI-apel2], Sum([pro1_rhiscab Consulta].[Suma
De RHML-prevta]) AS [Total de Suma De RHML-prevta]
FROM [pro1_rhiscab Consulta]
GROUP BY [pro1_rhiscab Consulta].[GCLI-clialm],
[pro1_rhiscab Consulta].[GCLI-apel1], [pro1_rhiscab
Consulta].[GCLI-apel2]
PIVOT Format([RHML-fecmov],"mmm") In
("ene","feb","mar","abr","may","jun","jul","ago","sep","oct
","nov","dic");

Por no sigo con ACCESS porque las tablas de clientes son
15.000 reg, 60.000 de cabeceras y 180.000 reg de historial
de lineas de albaran. y he pensao que me iria mas rapido.
Las he importado del servidor a mi maquina un PII a 350
con 256 MB de RAM y claro los JOINS de esto es muy lento.

¿Que solucion me dais?
¿Algun listado parecido al que busco? ya sea en sql server
o en access

UN saludo
 

Leer las respuestas

#1 Liliana Sorrentino
15/06/2004 - 13:39 | Informe spam
Hola,
Te mando un ejemplo de lo que necesitarías, tendrás que escribir más que en
Access, pero no desesperes, según nos contaron en la nueva versión de SQL
será más simple.
Saludos... Liliana.

select * from #clientes
create table #clientes
(cdg_cli smallint,
apellido1 varchar(10),
apellido2 varchar(10))
insert #clientes select 1, 'Ruiz', 'Garcia'
insert #clientes select 2, 'Bustos', 'Martinez'
insert #clientes select 3, 'Rodriguez', 'Matos'

select * from #cabecera_albaranes
create table #cabecera_albaranes
(numerodocumento smallint,
cdg_cli smallint,
fecha datetime)
insert #cabecera_albaranes select 10, 1, '20040101'
insert #cabecera_albaranes select 11, 1, '20040102'
insert #cabecera_albaranes select 20, 2, '20040202'
insert #cabecera_albaranes select 21, 2, '20040402'
insert #cabecera_albaranes select 30, 3, '20040602'
insert #cabecera_albaranes select 31, 3, '20040702'
insert #cabecera_albaranes select 32, 3, '20041002'

select * from #albaranes
create table #albaranes
(numerodocumento smallint,
pvp smallint,
neto smallint,
costo smallint)
insert #albaranes select 10, 100, 110, 120
insert #albaranes select 11, 200, 210, 220
insert #albaranes select 20, 300, 310, 320
insert #albaranes select 21, 400, 410, 420
insert #albaranes select 31, 500, 510, 520
insert #albaranes select 32, 600, 610, 620
insert #albaranes select 30, 700, 710, 720


select c.cdg_cli, apellido1, apellido2,
sum(case when month(fecha) = 01 then neto else 0 end) as NetoEne,
sum(case when month(fecha) = 01 then costo else 0 end) as CostoEne,
sum(case when month(fecha) = 02 then neto else 0 end) as NetoFeb,
sum(case when month(fecha) = 02 then costo else 0 end) as CostoFeb,
sum(case when month(fecha) = 03 then neto else 0 end) as NetoMar,
sum(case when month(fecha) = 03 then costo else 0 end) as CostoMar,
sum(case when month(fecha) = 04 then neto else 0 end) as NetoAbr,
sum(case when month(fecha) = 04 then costo else 0 end) as CostoAbr,
sum(case when month(fecha) = 05 then neto else 0 end) as NetoMay,
sum(case when month(fecha) = 05 then costo else 0 end) as CostoMay,
sum(case when month(fecha) = 06 then neto else 0 end) as NetoJun,
sum(case when month(fecha) = 06 then costo else 0 end) as CostoJun,
sum(case when month(fecha) = 07 then neto else 0 end) as NetoJul,
sum(case when month(fecha) = 07 then costo else 0 end) as CostoJul,
sum(case when month(fecha) = 08 then neto else 0 end) as NetoAgo,
sum(case when month(fecha) = 08 then costo else 0 end) as CostoAgo,
sum(case when month(fecha) = 09 then neto else 0 end) as NetoSet,
sum(case when month(fecha) = 09 then costo else 0 end) as CostoSet,
sum(case when month(fecha) = 10 then neto else 0 end) as NetoOct,
sum(case when month(fecha) = 10 then costo else 0 end) as CostoOct,
sum(case when month(fecha) = 11 then neto else 0 end) as NetoNov,
sum(case when month(fecha) = 11 then costo else 0 end) as CostoNov,
sum(case when month(fecha) = 12 then neto else 0 end) as NetoDic,
sum(case when month(fecha) = 12 then costo else 0 end) as CostoDic
from #clientes c
inner join #cabecera_albaranes ca on ca.cdg_cli = c.cdg_cli
inner join #albaranes a on a.numerodocumento = ca.numerodocumento
group by c.cdg_cli, apellido1, apellido2

"JFBM" escribió en el mensaje
news:1cb7401c452b6$d808aff0$
Hola!!

Pues me gustaria realizar una consulta de referencias
cruzadas en sql server.

tengo una tabla: clientes
cdg-cli
apellido1
apellido2

tabla cabecera de albaranes
numerodocumento
cdg-cli (llave ext)

tabla linea de albaranes:

numerodocument
pvp
neto
costo


pues me gustaria sacar los neto y costos de todos los
clientes cada mes desde 1/1/2004 al 1/06/2004

En Access hbia exo solo para los netos con la sentencia:

TRANSFORM Sum([pro1_rhiscab Consulta].[Suma De RHML-
prevta]) AS [SumaDeSuma De RHML-prevta]
SELECT [pro1_rhiscab Consulta].[GCLI-clialm],
[pro1_rhiscab Consulta].[GCLI-apel1], [pro1_rhiscab
Consulta].[GCLI-apel2], Sum([pro1_rhiscab Consulta].[Suma
De RHML-prevta]) AS [Total de Suma De RHML-prevta]
FROM [pro1_rhiscab Consulta]
GROUP BY [pro1_rhiscab Consulta].[GCLI-clialm],
[pro1_rhiscab Consulta].[GCLI-apel1], [pro1_rhiscab
Consulta].[GCLI-apel2]
PIVOT Format([RHML-fecmov],"mmm") In
("ene","feb","mar","abr","may","jun","jul","ago","sep","oct
","nov","dic");

Por no sigo con ACCESS porque las tablas de clientes son
15.000 reg, 60.000 de cabeceras y 180.000 reg de historial
de lineas de albaran. y he pensao que me iria mas rapido.
Las he importado del servidor a mi maquina un PII a 350
con 256 MB de RAM y claro los JOINS de esto es muy lento.

¿Que solucion me dais?
¿Algun listado parecido al que busco? ya sea en sql server
o en access

UN saludo

Preguntas similares