Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problemas con cláusula Group By

Estas en el tema de Problemas con cláusula Group By en el foro de SQL Server en Foros del Web. Buenas! Tengo una consulta que me está volviendo loco, es esta: Cita: Select a.codigo, m.nombre As Marca1, a.nombre As titulo, f.nombre As familia, s.nombre As ...
  #1 (permalink)  
Antiguo 26/01/2009, 06:29
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 21 años
Puntos: 6
Problemas con cláusula Group By

Buenas!

Tengo una consulta que me está volviendo loco, es esta:

Cita:
Select a.codigo, m.nombre As Marca1, a.nombre As titulo, f.nombre As familia, s.nombre As subfamilia, Sum(p.pvp) As pvp, Sum(st.final) As final, a.nombre2, a.observacio, a.imagen, a.peso From (((((articulo As a Inner Join familias As f ON a.familia=f.codigo) Inner Join subfam As s ON a.subfamilia=s.codigo) Inner Join stocks2 As st ON a.codigo=st.articulo And st.empresa='01') Inner Join pvp As p ON a.codigo=p.articulo And p.tarifa='PD') Left Join marcas As m ON a.marca=m.codigo) Where a.baja='False' Group By a.codigo, m.nombre, a.nombre, f.nombre, s.nombre;
El problema es que la consulta me tira este error:

Cita:
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'articulo.NOMBRE2' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
Me dice que agregue el campo "nombre2" al Group By pero este campo es de tipo "text" y cuando lo agrego salta este error:

Cita:
[Microsoft][ODBC SQL Server Driver][SQL Server]The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.
¿Cómo puedo solventarlo?, me estoy volviendo loco con esto, el campo "observacio" es de tipo "memo", no sé si también me dará este problema luego...

Muchas gracias a tod@s!
  #2 (permalink)  
Antiguo 26/01/2009, 08:41
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 21 años
Puntos: 6
Respuesta: Problemas con cláusula Group By

Ya está, lo he conseguido solucionar así:

Cita:
Select a.codigo, m.nombre As Marca1, a.nombre As titulo, f.nombre As familia, s.nombre As subfamilia, Sum(p.pvp) As pvp, Sum(st.final) As final, (Select nombre2 From articulo Where codigo=a.codigo) As nombre2, (Select observacio From articulo Where codigo=a.codigo) As observacio, a.imagen, a.peso From (((((articulo As a Inner Join familias As f ON a.familia=f.codigo) Inner Join subfam As s ON a.subfamilia=s.codigo) Inner Join stocks2 As st ON a.codigo=st.articulo And st.empresa='01') Inner Join pvp As p ON a.codigo=p.articulo And p.tarifa='PD') Left Join marcas As m ON a.marca=m.codigo) Where a.baja='False' Group By a.codigo, m.nombre, a.nombre, f.nombre, s.nombre, a.imagen, a.peso;
No sé si es la manera más eficiente de hacerlo pero por lo menos funciona... si alguien tiene alguna sugerencia sea bienvenida...

Muchas gracias.
  #3 (permalink)  
Antiguo 26/01/2009, 09:36
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Respuesta: Problemas con cláusula Group By

Otra alternativa...

Código:
Select a.codigo
      ,sub.Marca1
      ,sub.titulo
      ,sub.familia
      ,sub.subfamilia
      ,sub.pvp
      ,sub.final
      ,a.nombre2
      ,a.observacio
      ,a.imagen
      ,a.peso 
From  articulo As a 
Inner join
(Select a.codigo
      ,m.nombre As Marca1
      ,a.nombre As titulo
      ,f.nombre As familia
      ,s.nombre As subfamilia
      ,Sum(p.pvp) As pvp
      ,Sum(st.final) As final
From articulo       As a 
Inner Join familias As f  ON a.familia=f.codigo
Inner Join subfam   As s  ON a.subfamilia=s.codigo
Inner Join stocks2  As st ON a.codigo=st.articulo  And st.empresa = '01'
Inner Join pvp      As p  ON a.codigo=p.articulo   And p.tarifa   = 'PD'
Left Join marcas    As m  ON a.marca=m.codigo 
Where a.baja='False' 
Group By a.codigo, m.nombre, a.nombre, f.nombre, s.nombre  ) sub
On a.codigo = sub.codigo
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 12/01/2012, 11:03
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con cláusula Group By

yo tengo un problema similar
Mis tablas

TABLE empleados(
[id_emp] [int] IDENTITY(1,1) NOT NULL,
[nom_emp] [nvarchar](50) NULL,
[id_dist] [int] NULL,

TABLE empleados_dist(
[id_dist] [int] IDENTITY(1,1) NOT NULL,
[nom_dist] [nvarchar](50) NULL,

Código SQL:
Ver original
  1. SELECT empleados.nom_emp, empleados_dist.nom_dist
  2. FROM dbo.empleados,dbo.empleados_dist
  3. WHERE empleados.id_dist=empleados_dist.id_dist
  4. GROUP BY empleados.nom_emp

el error
La columna 'dbo.empleados_dist.nom_dist' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.
  #5 (permalink)  
Antiguo 12/01/2012, 11:07
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problemas con cláusula Group By

Hola que tal, intenta esto:

Código SQL:
Ver original
  1. SELECT empleados.nom_emp, empleados_dist.nom_dist
  2. FROM dbo.empleados,dbo.empleados_dist
  3. WHERE empleados.id_dist=empleados_dist.id_dist
  4. GROUP BY empleados.nom_emp, empleados_dist.nom_dist
  5.  
  6. --Puedes mejorarla asi
  7. SELECT a.nom_emp, b.nom_dist
  8. FROM dbo.empleados AS a (NOLOCK)
  9. JOIN dbo.empleados_dist AS b (NOLOCK) ON ( a.id_dist=b.id_dist )
  10. GROUP BY a.nom_emp, b.nom_dist

Lo mismo que estas poniendo en el SELECT tienes que poner en el GROUP BY, suerte

Es mejor el manejo del JOIN, bueno gusto personal
  #6 (permalink)  
Antiguo 12/01/2012, 16:18
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con cláusula Group By

Eres el Mejor drako_darpan me resulto de mil Maravillas

  #7 (permalink)  
Antiguo 12/01/2012, 17:51
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con cláusula Group By

Doc Un favor grande tengo estas dos tablas

Código SQL:
Ver original
  1. CREATE TABLE [dbo].[simdistritos](
  2.     [pais_cod] [CHAR](4) NOT NULL,
  3.     [prov_cod] [CHAR](4) NOT NULL,
  4.     [dist_cod] [CHAR](4) NOT NULL,
  5.     [dist_nom] [CHAR](50) NOT NULL,
  6.     [sicpc] [CHAR](20) NOT NULL,
  7.     [sicfecha] [datetime] NOT NULL
  8.  
  9. CREATE TABLE [dbo].[vemsuscripcion](
  10.     [emp_cod] [CHAR](10) NOT NULL,
  11.     [sus_id] [INT] NOT NULL,
  12.     [sus_anio] [INT] NOT NULL,
  13.     [sus_mes] [INT] NOT NULL,
  14.     [suc_cod] [CHAR](10) NOT NULL,
  15.     [sus_camp] [INT] NOT NULL,
  16.     [sus_fch] [smalldatetime] NOT NULL,
  17.     [sus_flgnueren] [INT] NOT NULL,
  18.     [sus_ficha] [CHAR](10) NOT NULL,
  19.     [sus_codigo] [CHAR](19) NOT NULL,
  20.     [coa_id] [INT] NOT NULL,
  21.     [coa_tdoc] [CHAR](2) NOT NULL,
  22.     [coa_ndoc] [CHAR](11) NOT NULL,
  23.     [coa_razsoc] [CHAR](80) NOT NULL,
  24.     [pais_cod] [CHAR](4) NOT NULL,
  25.     [prov_cod] [CHAR](4) NOT NULL,
  26.     [dist_cod] [CHAR](4) NOT NULL,
  27.     [coa_direc] [CHAR](70) NOT NULL,
  28.     [coa_email] [CHAR](200) NOT NULL,
  29.     [sus_aten] [CHAR](80) NOT NULL,
  30.     [coa_obs_cli] [text] NOT NULL,
  31.     [pais_cod_ent] [CHAR](4) NOT NULL,
  32.     [prov_cod_ent] [CHAR](4) NOT NULL,
  33.     [dist_cod_ent] [CHAR](4) NOT NULL,
  34.     [coa_direc_ent] [CHAR](70) NOT NULL,
  35.     [coa_direcref_ent] [CHAR](70) NOT NULL,
  36.     [coa_telfijo_ent] [CHAR](50) NOT NULL,
  37.     [coa_telcelu_ent] [CHAR](50) NOT NULL,
  38.     [sus_contac_ent] [CHAR](80) NOT NULL,
  39.     [coa_obs_clilog] [text] NOT NULL,
  40.     [pais_cod_cob] [CHAR](4) NOT NULL,
  41.     [prov_cod_cob] [CHAR](4) NOT NULL,
  42.     [dist_cod_cob] [CHAR](4) NOT NULL,
  43.     [coa_direc_cob] [CHAR](70) NOT NULL,
  44.     [coa_direcref_cob] [CHAR](70) NOT NULL,
  45.     [coa_telfijo_cob] [CHAR](50) NOT NULL,
  46.     [coa_telcelu_cob] [CHAR](50) NOT NULL,
  47.     [sus_contac_cob] [CHAR](80) NOT NULL,
  48.     [coa_obs_clicob] [text] NOT NULL,
  49.     [coa_id_vend] [INT] NOT NULL,
  50.     [coa_tdoc_vend] [CHAR](2) NOT NULL,
  51.     [coa_ndoc_vend] [CHAR](11) NOT NULL,
  52.     [coa_razsoc_vend] [CHAR](80) NOT NULL,
  53.     [art_cod] [CHAR](20) NOT NULL,
  54.     [art_nom] [CHAR](90) NOT NULL,
  55.     [sus_cant] [INT] NOT NULL,
  56.     [sus_inirep] [smalldatetime] NOT NULL,
  57.     [sus_finrep] [smalldatetime] NOT NULL,
  58.     [sus_inibol] [smalldatetime] NOT NULL,
  59.     [sus_finbol] [smalldatetime] NOT NULL,
  60.     [sus_iniase] [smalldatetime] NOT NULL,
  61.     [sus_finase] [smalldatetime] NOT NULL,
  62.     [sus_iniweb] [smalldatetime] NOT NULL,
  63.     [sus_finweb] [smalldatetime] NOT NULL,
  64.     [sus_flgconcre] [INT] NOT NULL,
  65.     [sus_mon] [INT] NOT NULL,
  66.     [sus_tc] [NUMERIC](9, 3) NOT NULL,
  67.     [imp_pl_mn] [NUMERIC](9, 2) NOT NULL,
  68.     [imp_pv_mn] [NUMERIC](9, 2) NOT NULL,
  69.     [imp_ini_mn] [NUMERIC](9, 2) NOT NULL,
  70.     [imp_sld_mn] [NUMERIC](9, 2) NOT NULL,
  71.     [imp_pl_me] [NUMERIC](9, 2) NOT NULL,
  72.     [imp_pv_me] [NUMERIC](9, 2) NOT NULL,
  73.     [imp_ini_me] [NUMERIC](9, 2) NOT NULL,
  74.     [imp_sld_me] [NUMERIC](9, 2) NOT NULL,
  75.     [sus_flgttg] [INT] NOT NULL,
  76.     [sus_cuotas] [INT] NOT NULL,
  77.     [sus_flglet] [INT] NOT NULL,
  78.     [sus_cuo_01] [CHAR](10) NOT NULL,
  79.     [sus_fch_01] [smalldatetime] NOT NULL,
  80.     [sus_imp_01] [NUMERIC](9, 2) NOT NULL,
  81.     [sus_cuo_02] [CHAR](10) NOT NULL,
  82.     [sus_fch_02] [smalldatetime] NOT NULL,
  83.     [sus_imp_02] [NUMERIC](9, 2) NOT NULL,
  84.     [sus_cuo_03] [CHAR](10) NOT NULL,
  85.     [sus_fch_03] [smalldatetime] NOT NULL,
  86.     [sus_imp_03] [NUMERIC](9, 2) NOT NULL,
  87.     [sus_cuo_04] [CHAR](10) NOT NULL,
  88.     [sus_fch_04] [smalldatetime] NOT NULL,
  89.     [sus_imp_04] [NUMERIC](9, 2) NOT NULL,
  90.     [sus_cuo_05] [CHAR](10) NOT NULL,
  91.     [sus_fch_05] [smalldatetime] NOT NULL,
  92.     [sus_imp_05] [NUMERIC](9, 2) NOT NULL,
  93.     [sus_cuo_06] [CHAR](10) NOT NULL,
  94.     [sus_fch_06] [smalldatetime] NOT NULL,
  95.     [sus_imp_06] [NUMERIC](9, 2) NOT NULL,
  96.     [sus_cuo_07] [CHAR](10) NOT NULL,
  97.     [sus_fch_07] [smalldatetime] NOT NULL,
  98.     [sus_imp_07] [NUMERIC](9, 2) NOT NULL,
  99.     [sus_cuo_08] [CHAR](10) NOT NULL,
  100.     [sus_fch_08] [smalldatetime] NOT NULL,
  101.     [sus_imp_08] [NUMERIC](9, 2) NOT NULL,
  102.     [sus_cuo_09] [CHAR](10) NOT NULL,
  103.     [sus_fch_09] [smalldatetime] NOT NULL,
  104.     [sus_imp_09] [NUMERIC](9, 2) NOT NULL,
  105.     [sus_cuo_10] [CHAR](10) NOT NULL,
  106.     [sus_fch_10] [smalldatetime] NOT NULL,
  107.     [sus_imp_10] [NUMERIC](9, 2) NOT NULL,
  108.     [sus_flgretrep] [INT] NOT NULL,
  109.     [sus_flgretbol] [INT] NOT NULL,
  110.     [sus_flgretase] [INT] NOT NULL,
  111.     [sus_flgretweb] [INT] NOT NULL,
  112.     [sus_flggendocvta] [INT] NOT NULL,
  113.     [doc_tipo] [CHAR](2) NOT NULL,
  114.     [doc_serie] [CHAR](4) NOT NULL,
  115.     [doc_nro] [INT] NOT NULL,
  116.     [doc_est] [CHAR](1) NOT NULL,
  117.     [mov_id] [INT] NOT NULL,
  118.     [vou_serie] [CHAR](4) NOT NULL,
  119.     [vou_nro] [INT] NOT NULL,
  120.     [sus_flgrep] [INT] NOT NULL,
  121.     [sixpc] [CHAR](20) NOT NULL,
  122.     [sixfecha] [datetime] NOT NULL,
  123.     [sixusuario] [CHAR](10) NOT NULL,
  124.     [sus_flgorigen] [CHAR](4) NOT NULL,
  125.     [sus_flgorigen_id] [NUMERIC](10, 0) NOT NULL,
  126.     [sus_est] [CHAR](1) NOT NULL,
  127.     [sicpc] [CHAR](20) NOT NULL,
  128.     [sicfecha] [datetime] NOT NULL,
  129.     [sicusuario] [CHAR](10) NOT NULL,
  130.     [simpc] [CHAR](20) NULL,
  131.     [simfecha] [datetime] NULL,
  132.     [simusuario] [CHAR](10) NULL,
  133.     [sus_impcomicont_mn] [NUMERIC](9, 2) NOT NULL,
  134.     [sus_impcomici_mn] [NUMERIC](9, 2) NOT NULL,
  135.     [sus_codigoant] [CHAR](19) NOT NULL

YY tengo Esta consulta

Código SQL:
Ver original
  1. SELECT  vemsuscripcion.sus_aten,vemsuscripcion.coa_razsoc,
  2. vemsuscripcion.sus_codigo,vemsuscripcion.sus_finweb
  3. ,vemsuscripcion.coa_direc_ent,vemsuscripcion.dist_cod_ent,vemsuscripcion.coa_razsoc_vend,
  4. simdistritos.dist_nom,vemsuscripcion.art_nom,vemsuscripcion.sus_est  FROM
  5. vemsuscripcion
  6. INNER JOIN simdistritos
  7. ON vemsuscripcion.dist_cod_ent=simdistritos.dist_cod
  8. WHERE
  9. vemsuscripcion.sus_camp='2012'
  10. AND art_nom NOT LIKE'%GUBERNAMENTAL%'  AND  sus_est IN ('A', 'E')
  11.  
  12. --GROUP BY  sus_aten
  13. ORDER BY sus_aten

cuando descomento --GROUP BY sus_aten
me sale error

Aqui te dejo la base de datos para que lo importes
http://www.megaupload.com/?d=DNVN72OX

esta en sigem_bacup_2012_01.bak
la base de datos se llama
sigem_bacup_2012_01


Si puedes ayudarme seria genial ya que no puedo estar haciando un gropu by por cada registro

Última edición por cesar203; 12/01/2012 a las 17:56
  #8 (permalink)  
Antiguo 13/01/2012, 02:54
 
Fecha de Ingreso: octubre-2009
Mensajes: 29
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Problemas con cláusula Group By

Hola cesar203, la cosa es que no estás agrupando por nada, así que ¿para qué quieres el group by?

group by solo se utiliza cuando tienes en el select algún campo agrupado (como puede ser sum, max, min) o cuando no quieres sacar registros repetidos, que en ese caso hay que poner en la clausula todo lo que tengas en el select (como bien dice drako_darpan)
  #9 (permalink)  
Antiguo 13/01/2012, 08:30
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con cláusula Group By

De Antemano
Por su tiempo

Gracias por la explicacion pero podrian poner un ejemplo
similar uniendo dos tablas pero con (sum, max, min)

Perdon por la IGNORANCIA MIA ..........

Por favor
  #10 (permalink)  
Antiguo 13/01/2012, 09:32
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problemas con cláusula Group By

Hola que tal, bueno este te podria servir como ejemplo:

Código SQL:
Ver original
  1. SELECT  a.sus_aten, SUM( a.sus_codigo )
  2. FROM vemsuscripcion AS a (NOLOCK)
  3. JOIN simdistritos AS b (NOLOCK) ON ( a.dist_cod_ent=b.dist_cod )
  4. WHERE vemsuscripcion.sus_camp='2012' AND art_nom NOT LIKE'%GUBERNAMENTAL%'  AND  sus_est IN ('A', 'E')
  5. GROUP BY  a.sus_aten
  6. ORDER BY a.sus_aten

Si utilizas un SUM debes de poner un GROUP BY, si en el select tienes campos que no corresponden al SUM, esos son los que van en el GROUP BY.

  #11 (permalink)  
Antiguo 13/01/2012, 15:16
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con cláusula Group By

Perfecto Doc me tapastes la boca ahora si

son los numero uno




Mil gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:07.