Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Unir filas con la misma llave de una misma consulta sql server (https://www.clubdelphi.com/foros/showthread.php?t=80223)

DarkBlue 10-09-2012 19:59:59

Unir filas con la misma llave de una misma consulta sql server
 
bueno, compañeros tengo una consulta un tanto complicada no se donde se encuentre el truco para lograrla estoy trabajando con sql server 2008 express la consulta la trato de obtener de una vista que he creado.

lo que intento es lo siguiente.


tengo los 12 meses del año y dependiendo que si es enero,abril u otro mes sume el monto de ese mes para ese proveedor y lo mismo para los 12 meses de ese proveedor. pero no obtengo el resultado que quiero por que me entrega para cada mes otra fila con el monto

de esta manera:
proveedor enero febrero marzo abril ....
p1 0.0 12.30
p2 0 12
p1 12

y yo necesito todos los valores de cada mes para cada proovedor en una sola fila.
es decir asi.

proveedor enero febrero marzo abril ....
p1 12 12.30
p2 0 12




tengo esta consulta

Código SQL [-]


SELECT razon_social, case when MONTH(fecharecivo)=1 then SUM(saldoporpagar)else 0 end as 'Enero'
,case when MONTH(fecharecivo)=2 then SUM(saldoporpagar)else 0 end as 'Febrero'
,case when MONTH(fecharecivo)=3 then SUM(saldoporpagar)else 0 end as 'Marzo'
,case when MONTH(fecharecivo)=4 then SUM(saldoporpagar)else 0 end as 'Abril'
,case when MONTH(fecharecivo)=5 then SUM(saldoporpagar)else 0 end as 'Mayo'
,case when MONTH(fecharecivo)=6 then SUM(saldoporpagar)else 0 end as 'Junio'
,case when MONTH(fecharecivo)=7 then SUM(saldoporpagar)else 0 end as 'Julio'
,case when MONTH(fecharecivo)=8 then SUM(saldoporpagar)else 0 end as 'Agosto'
,case when MONTH(fecharecivo)=9 then SUM(saldoporpagar)else 0 end as 'Septiembre'
,case when MONTH(fecharecivo)=10 then SUM(saldoporpagar)else 0 end as 'Octubre'
,case when MONTH(fecharecivo)=11 then SUM(saldoporpagar)else 0 end as 'Noviembre'
,case when MONTH(fecharecivo)=12 then SUM(saldoporpagar)else 0 end as 'Diciembre'
from facturasfoliosporpagar
group by razon_social,FECHARECIVO

acaso tengo que hacer algun inner join o algo por el estilo?

muchas gracias por su tiempo

roman 10-09-2012 20:24:26

No entiendo bien cuál es el problema. Pero lo que sí veo raro son las sentencia de cada mes:

Código SQL [-]
case when MONTH(fecharecivo)=2 then SUM(saldoporpagar)else 0 end as 'Febrero'

Creo que más bien deberían ser así:

Código SQL [-]
SUM(case when MONTH(fecharecivo)=2 then saldoporpagar else 0 end) as 'Febrero'

// Saludos

DarkBlue 11-09-2012 07:22:16

gracias por tu tiempo roman wow no me imagine la condicion dentro de la funcion de agregado .

es que yo necesito en una sola fila por proveedor todos los montos totales por mes y los obtengo por filas separadas.
en una fila me devuelve del provedor uno con el total de enero , en otra el proveedor uno con el saldo total de febrero pero necesito todos los saldos en una sola fila.

una ves mas gracias :D

abelg 11-09-2012 19:40:03

mira la solución la tabla temporal es solo para el ejemplo:
Código SQL [-]
Create table #factura (
     razonsoc varchar(100),
     fecha datetime,
     monto money )
insert #factura values('P1','2012-01-10 00:00:00', 1000) 
insert #factura values('P1','2012-01-15 00:00:00', 500)
insert #factura values('P1','2012-02-10 00:00:00', 900) 
insert #factura values('P1','2012-05-31 00:00:00', 1000) 
insert #factura values('P1','2012-07-10 00:00:00', 100) 
insert #factura values('P1','2012-12-10 00:00:00', 700) 
insert #factura values('P2','2012-01-10 00:00:00', 2000) 
insert #factura values('P2','2012-05-10 00:00:00', 4000) 
insert #factura values('P3','2012-02-10 00:00:00', 500)  
Select razonsoc, [1] Enero, [2] Febrero, [3] Marzo, [4] Abril,
[5] Mayo, [6] Junio, [7] Julio, [8] Agosto, [9] Septiembre, [10] Octubre,
[11] Noviembre, [12] Diciembre 
From (Select razonsoc, month(fecha) mes, monto
         From #factura) p 
Pivot(
     Sum(monto)
     For mes in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
)as pvt
order by pvt.razonsoc  
Drop table #factura
salu2

DarkBlue 11-09-2012 22:42:24

Cita:

Empezado por abelg (Mensaje 442803)
mira la solución la tabla temporal es solo para el ejemplo:
Código SQL [-]
Create table #factura (
     razonsoc varchar(100),
     fecha datetime,
     monto money )
insert #factura values('P1','2012-01-10 00:00:00', 1000) 
insert #factura values('P1','2012-01-15 00:00:00', 500)
insert #factura values('P1','2012-02-10 00:00:00', 900) 
insert #factura values('P1','2012-05-31 00:00:00', 1000) 
insert #factura values('P1','2012-07-10 00:00:00', 100) 
insert #factura values('P1','2012-12-10 00:00:00', 700) 
insert #factura values('P2','2012-01-10 00:00:00', 2000) 
insert #factura values('P2','2012-05-10 00:00:00', 4000) 
insert #factura values('P3','2012-02-10 00:00:00', 500)  
Select razonsoc, [1] Enero, [2] Febrero, [3] Marzo, [4] Abril,
[5] Mayo, [6] Junio, [7] Julio, [8] Agosto, [9] Septiembre, [10] Octubre,
[11] Noviembre, [12] Diciembre 
From (Select razonsoc, month(fecha) mes, monto
         From #factura) p 
Pivot(
     Sum(monto)
     For mes in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
)as pvt
order by pvt.razonsoc  
Drop table #factura
salu2

eres grande sin duda solo alguien con tus conocimientos pudo ayudarme doy como solucionado mi problema ahora solo me queda estudiar las sentencias desconocidas por mi muchas gracias compañero abelg


La franja horaria es GMT +2. Ahora son las 10:42:03.

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