none
Me repite el mismo monto sumado para todos en mi consulta sql RRS feed

  • Pregunta

  • tengo mis columanas ya consultadas y mostrando:

    Pais,
    Estado
    cantidad,
    Retirado
    Efectivos

     en la columan Costo hago una subconsulta para saber la suma de cada Estado, la sub consulta por su sola ya funciona y la probe por separado, pero al momento de implementar me suma de un estado y me las muestra en todos el mismo monto.

    declare
    @anho  int
    select 
    @anho = 2017;
    
    
    select 
    
    (select x.nom from BD.dbo.Ent x where x.IdEnt = ch.CodEnt) as Pais,
    (select x.Nombre from BD.dbo.Co x where x.IdCo = ch.CodCo ) as Estado,
    (select  COUNT(*) as total from BD.dbo.Mat x where x.IdC = ch.Cod) as cantidad,
    (select  COUNT(*) as total from BD.dbo.Mat x where x.IdC = ch.Cod and FechaRetiro is not null) as Retirados,
    (select  COUNT(*) as total from BD.dbo.Mat x where x.IdC = ch.Cod and FechaRetiro is null) as Efectivos,
    
    Costo = isnull( (
    
    (SELECT SUM(cc.valor) 
    			FROM 
    			Cuenta cc 
    			inner join BD.dbo.Co c on cc.IdCo = c.IdC
    			inner join BD.dbo.Mat xm on  xm.Cod = cc.IdA
    
    				and xm.FechaRetiro is null 
    				and cc.Gestion = @anho 
    				and xm.Gestion = @anho
    		where
    		cc.IdS	= 24)
    ),0)
    
    from Cuenta cc, BD.dbo.CargaH ch
    
    group by ch.Gestion,
    		ch.CodC,
    		ch.Cod

    jueves, 5 de octubre de 2017 16:15

Respuestas

  • al parecer solo me falto una comparación mas 

    c.IdCo = ch.Cod

    queda asi mi subconsulta:

    Costo = isnull( (
    
    (SELECT SUM(cc.valor) 
    			FROM 
    			Cuenta cc 
    			inner join BD.dbo.Co c on cc.IdCo = c.IdC
    			inner join BD.dbo.Mat xm on  xm.Cod = cc.IdA
    
    				and xm.FechaRetiro is null 
    				and cc.Gestion = @anho 
    				and xm.Gestion = @anho
    		where
                        c.IdCo = ch.Cod
                        and cc.IdS = 24)
    ),0)

    jueves, 5 de octubre de 2017 19:20

Todas las respuestas

  • Hola Rodrigo Rodriguez G

    En todo caso tienes que usar esa subconsulta como si fuese una tabla y colocarla en tu From, entonces cruzarás el estado con el dato correspondiente de esta subconsulta para poder obtener los datos que deseas

    declare
    @anho  int
    select 
    @anho = 2017;
    
    
    select 
    
    (select x.nom from BD.dbo.Ent x where x.IdEnt = ch.CodEnt) as Pais,
    (select x.Nombre from BD.dbo.Co x where x.IdCo = ch.CodCo ) as Estado,
    (select  COUNT(*) as total from BD.dbo.Mat x where x.IdC = ch.Cod) as cantidad,
    (select  COUNT(*) as total from BD.dbo.Mat x where x.IdC = ch.Cod and FechaRetiro is not null) as Retirados,
    (select  COUNT(*) as total from BD.dbo.Mat x where x.IdC = ch.Cod and FechaRetiro is null) as Efectivos,
    Costo = x.suma
    
    from Cuenta cc, BD.dbo.CargaH ch, (
    
    (SELECT SUM(isnul(cc.valor,0))  as suma
    			FROM 
    			Cuenta cc 
    			inner join BD.dbo.Co c on cc.IdCo = c.IdC
    			inner join BD.dbo.Mat xm on  xm.Cod = cc.IdA
    
    				and xm.FechaRetiro is null 
    				and cc.Gestion = @anho 
    				and xm.Gestion = @anho
    		where
    		cc.IdS	= 24)
    ) x inner join -- aquí lo cruza
    
    group by ch.Gestion,
    		ch.CodC,
    		ch.Cod, x.suma
    Ojo que no lo estoy probando, es una idea de lo que deberías realizar, nos comentas.

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.


    jueves, 5 de octubre de 2017 17:20
  • al parecer solo me falto una comparación mas 

    c.IdCo = ch.Cod

    queda asi mi subconsulta:

    Costo = isnull( (
    
    (SELECT SUM(cc.valor) 
    			FROM 
    			Cuenta cc 
    			inner join BD.dbo.Co c on cc.IdCo = c.IdC
    			inner join BD.dbo.Mat xm on  xm.Cod = cc.IdA
    
    				and xm.FechaRetiro is null 
    				and cc.Gestion = @anho 
    				and xm.Gestion = @anho
    		where
                        c.IdCo = ch.Cod
                        and cc.IdS = 24)
    ),0)

    jueves, 5 de octubre de 2017 19:20