Obviar campos en group by SQL SERVER

447 views
Skip to first unread message

Edwin Duran

unread,
May 6, 2015, 12:39:53 PM5/6/15
to publice...@googlegroups.com
Saludos, Estoy migrando  a sql server y quiero obviar algunos campo en las Consultas SQL, las tablas de VFP y SET ENGINEBEHAVIOR a 70,  no tengo problema, pero como lo resuelvo en sql

el error es

Msg 8120, Level 16, State 1, Line 1
Column 'snbdemp.dpto' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.



SELECT [tipo_alma]
      ,[Periodo]
      ,[Semana]
      ,[cod_dep_pr] as depto
 ,Snbddpto.des_dep
      ,snbdprod_empaque.cod_emp
 ,ltrim(rtrim(snbdemp.nombre))+' '+ltrim(rtrim(snbdemp.apellido)) as nombre
      ,Snbdemp.dpto As departamento
      ,Snbdemp.pasaje
      ,Snbdemp.BAL_PREST
      ,Snbdemp.CUO_PREST
      ,Snbdemp.cedula
      ,Snbdemp.numerodecuenta 
      ,Snbdemp.tipo_cuenta
      ,Snbdemp.forma_pago
      ,Snbdemp.afp As cal_afp
      ,Snbdemp.ars As cal_ars
      ,sum(Lun_normal * prec_n_acti) as Lun_normal
      ,sum(Mar_normal * prec_n_acti) as mar_normal
      ,sum(mie_normal * prec_n_acti) as mie_normal
      ,sum(jue_normal * prec_n_acti) as jue_normal
      ,sum(vie_normal * prec_n_acti) as vie_normal
      ,sum(sab_normal * prec_n_acti) as sab_normal
      ,sum(dom_normal * prec_n_acti) as dom_normal
      ,sum(Lun_extra  * prec_e_acti) as Lun_extra
      ,sum(Mar_extra  * prec_e_acti) as mar_extra
      ,sum(mie_extra  * prec_e_acti) as mie_extra
      ,sum(jue_extra  * prec_e_acti) as jue_extra
      ,sum(vie_extra  * prec_e_acti) as vie_extra
      ,sum(sab_extra  * prec_e_acti) as sab_extra
      ,sum(dom_extra  * prec_e_acti) as dom_extra
      ,sum(Lun_doble  * prec_d_acti) as lun_doble
      ,sum(Mar_doble  * prec_d_acti) as mar_doble
      ,sum(mie_doble  * prec_d_acti) as mie_doble
      ,sum(jue_doble  * prec_d_acti) as jue_doble
      ,sum(vie_doble  * prec_d_acti) as vie_doble
      ,sum(sab_doble  * prec_d_acti) as sab_doble
      ,sum(dom_doble  * prec_d_acti) as dom_doble
      ,count(snbdprod_empaque.id) as id
  FROM snbdprod_empaque, snbdemp, Snbddpto
where snbdprod_empaque.cod_emp = snbdemp.cod_emp
and snbdprod_empaque.cod_dep_pr = Snbddpto.cod_dep
group by 
[tipo_alma]
      ,[Periodo]
      ,[Semana]
      ,[cod_dep_pr]
 ,Snbddpto.des_dep
      ,snbdprod_empaque.cod_emp
 ,snbdemp.nombre
 ,snbdemp.apellido
order by 
[tipo_alma]
      ,[Periodo]
      ,[Semana]
      ,[cod_emp]
 ,[cod_dep_pr]

Carlos Miguel FARIAS

unread,
May 7, 2015, 9:53:48 AM5/7/15
to Grupo Fox
Debes agregar la columna al GROUP BY, el SET ENGINE... solo funciona con el motor de datos de VFP.
Esa es la única solución que puedo pasarte en función de la instrucción que veo.
Ojo, salvo VFP con el SET ENGINE, no hay ningún otro SGBD que permita tener datos en el detalle de salida (SELECT) que no esté especificado a nivel GROUP BY.
Si se puede la inversa, tener columnas en el GROUP BY que no diguren en el detalle.
Saludos: Miguel, La Pampa (RA)

Edwin Duran

unread,
May 7, 2015, 1:08:56 PM5/7/15
to publice...@googlegroups.com, carlosmig...@gmail.com
Gracias Miguel pero ya lo resolví con la función max(), si alguien tiene un comentario me gustaría su opinión


SELECT [tipo_alma]
      ,[Periodo]
     ,[Semana]
     ,[cod_dep_pr]
 ,Snbddpto.des_dep
     ,snbdprod_empaque.cod_emp
 ,max(Snbdemp.dpto) As departamento
                  ,max(Snbdemp.pasaje) as pasaje
                  ,max(Snbdemp.BAL_PREST) as BAL_PREST
                  ,max(Snbdemp.CUO_PREST) as CUO_PREST
             ,max(Snbdemp.cedula) as cedula
                  ,ltrim(max(Snbdemp.numerodecuenta))  as numerodecuenta
                  ,max(Snbdemp.tipo_cuenta)     as tipo_cuenta
                  ,max(Snbdemp.forma_pago)      as forma_pago
                  ,max(Snbdemp.afp) As cal_afp
                  ,max(Snbdemp.ars) As cal_ars
order by
[tipo_alma]
     ,[Periodo]
     ,[Semana]
     ,[cod_emp]
      ,[cod_dep_pr]


Carlos Miguel FARIAS

unread,
May 7, 2015, 2:44:22 PM5/7/15
to Grupo Fox
No son soluciones equivalentes, ignoro que tiene el campo del cual tómas el máximo.
Pero prueba las dos soluciones y luego que el que te pide la información indique cual le conviene.
Saludos: Miguel, La Pampa (RA)

Edwin Duran

unread,
May 7, 2015, 3:10:08 PM5/7/15
to publice...@googlegroups.com, carlosmig...@gmail.com
Gracias, lo que pasa es que los campos en la tabla Snbdemp son unicos con el código de  empleado es decir no va a ver repetidos en esa tabla y en la otra tabla snbdprod_empaque, ahí sumo los datos 
Reply all
Reply to author
Forward
0 new messages