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

Se han especificado múltiples columnas en una expresión de agregado que contiene una

Estas en el tema de Se han especificado múltiples columnas en una expresión de agregado que contiene una en el foro de SQL Server en Foros del Web. Estimados Sres. este es mi Procedimiento Almacenado, el problema recurre cuando intento coger el valor de un campo (b.tipocambio) que pertenece a la tabla superior ...
  #1 (permalink)  
Antiguo 27/04/2012, 16:36
Avatar de vidalsoft  
Fecha de Ingreso: julio-2008
Ubicación: /www/...
Mensajes: 339
Antigüedad: 16 años, 4 meses
Puntos: 1
Se han especificado múltiples columnas en una expresión de agregado que contiene una

Estimados Sres. este es mi Procedimiento Almacenado, el problema recurre cuando intento coger el valor de un campo (b.tipocambio) que pertenece a la tabla superior RE_Venta y asu vez intento hacer un SUM(), me presenta el error que menciono en la parte inferior de este mensaje... ¿Alguién me puede ayudar?


Código SQL:
Ver original
  1. SELECT b.idventa,b.fecha, b.tipodocumento, c.nombrecorto, rtrim(b.seriedocumento)+'-'+b.numerodocumento nrodoc,
  2. b.nombrecliente,b.dependencia,f.nombre AS nombreDependencia,b.subdependencia,h.nombre AS nombreSubdependencia,b.proyecto,g.nombre AS nombreProyecto,a.partida,p.nombre AS nombrePartida, SUM(a.total) importe,b.tipocambio,
  3. isnull((SELECT SUM(CASE re_ventapago.moneda WHEN 1 THEN re_ventapago.importe/b.tipocambio ELSE re_ventapago.importe END) FROM re_ventapago,re_venta WHERE re_ventapago.idventafactura=b.idventa AND re_venta.idventa=re_ventapago.idventa AND re_venta.estado=1 AND re_ventapago.estado=1 ),0) AS pagado,
  4. isnull(SUM(a.total)-(SELECT SUM(re_ventapago.importe) FROM re_ventapago,re_venta WHERE re_ventapago.idventafactura=b.idventa AND re_venta.idventa=re_ventapago.idventa AND re_venta.estado=1 AND re_ventapago.estado=1),SUM(a.total)) AS saldo,
  5. DATEDIFF(dd,b.fecha,'Abr 24 2012 12:00AM') AS dias
  6. FROM re_ventadetalle a LEFT OUTER JOIN re_venta b ON a.idventa=b.idventa  
  7. LEFT OUTER JOIN si_tipodocumento c ON b.tipodocumento=c.idtipodocumento
  8. LEFT OUTER JOIN si_moneda d ON b.moneda=d.idmoneda
  9. LEFT OUTER JOIN te_partida p ON a.partida=p.codigo
  10. LEFT OUTER JOIN si_fuentefinanciamiento e ON p.fuentefinanciamiento=e.codigofuente
  11. LEFT OUTER JOIN si_dependencia f ON b.dependencia=f.codigo
  12. LEFT OUTER JOIN si_subdependencia h ON b.subdependencia=h.codigo
  13. LEFT OUTER JOIN si_proyecto g ON (b.proyecto=g.codigo AND b.dependencia=g.dependencia)  
  14.  WHERE  b.estado IN (2)  AND  b.tipodocumento IN (1) AND
  15.  b.fecha <= 'Abr 24 2012 12:00AM'
  16.  AND b.moneda='2' GROUP BY  b.tipodocumento, b.idventa,b.seriedocumento, b.numerodocumento, b.fecha, c.nombrecorto,
  17. b.nombrecliente,b.dependencia,f.nombre, b.subdependencia,h.nombre,b.proyecto,g.nombre, a.partida,p.nombre,b.moneda,b.tipocambio
  18.  ORDER BY b.tipodocumento, b.fecha

Código SQL:
Ver original
  1. Servidor: mensaje 8124, nivel 16, estado 1, línea 1
  2. Se han especificado múltiples columnas en una expresión de agregado que contiene una referencia externa. Si una expresión agregada contiene una referencia externa, ésta deberá ser la única columna a la que se haga referencia en la expresión.

Muchas gracias de antemano.
__________________
Anthony Vidal Contreras | @AnthonyVidalC | Skype: vidalsystem | [email protected]
  #2 (permalink)  
Antiguo 28/04/2012, 22:48
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

Espero los comentarios de los que normalmente visitamos este foro, pero creo que el problema esta en esta linea:

LEFT OUTER JOIN si_proyecto g ON (b.proyecto=g.codigo AND b.dependencia=g.dependencia)

Creo que no puedes hacer un JOIN sobre una comparacion de AND
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 02/05/2012, 09:09
Avatar de vidalsoft  
Fecha de Ingreso: julio-2008
Ubicación: /www/...
Mensajes: 339
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

Estimado gracias por tu respuesta, pero ese no es el problema, el problema es en la línea 3 con el campo b.tipocambio que es un campo de la seleccion superior, porque lo que pretendo es obtener el tipo de cambio de la tabla re_venta superior más no la de la subconsulta ... espero que me puedas ayudar.
__________________
Anthony Vidal Contreras | @AnthonyVidalC | Skype: vidalsystem | [email protected]
  #4 (permalink)  
Antiguo 02/05/2012, 10:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

te falta agregar una columna en tu group by por ejemplo en tu select tienes dato1,dato2 necesitas tener en el group dato1 y dato2 asi mismo si haces una funcion de agregado (sum, count etc) necesitas agregar esas columnas al group by ese es el error que te marca el SQL.

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 02/05/2012, 12:47
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

Mi estimado Libras, quitame esta condenada duda, ¿esto funciona?

ON (b.proyecto=g.codigo AND b.dependencia=g.dependencia)

O sea, se puede hacer un JOIN sobre una comparacion?
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 02/05/2012, 13:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

pues me ha tocado trabajar con mas de una condicion en un ON para evitar poner la segunda condicion en el where y si funciona.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 02/05/2012, 14:44
Avatar de vidalsoft  
Fecha de Ingreso: julio-2008
Ubicación: /www/...
Mensajes: 339
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

Cita:
Iniciado por Libras Ver Mensaje
te falta agregar una columna en tu group by por ejemplo en tu select tienes dato1,dato2 necesitas tener en el group dato1 y dato2 asi mismo si haces una funcion de agregado (sum, count etc) necesitas agregar esas columnas al group by ese es el error que te marca el SQL.

Saludos!
Estimado Libras, lo que usted dice lo tengo bien claro, el problema es con el campo b.tipocambio que pertenece a la selección principal y me dice que no puedo utilizar en la selección (select) de la subconsulta. Yo tengo bien claro cual es el problema. Pero no se como coger ese valor sin necesidad que tenga este error, alguna tecnica u otra forma de hacerlo.

Espero sus respuestas gracias.
__________________
Anthony Vidal Contreras | @AnthonyVidalC | Skype: vidalsystem | [email protected]
  #8 (permalink)  
Antiguo 02/05/2012, 15:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

creo que aqui esta el error

isnull((SELECT sum(case re_ventapago.moneda when 1 then re_ventapago.importe/b.tipocambio else re_ventapago.importe end) FROM re_ventapago,re_venta WHERE re_ventapago.idventafactura=b.idventa AND re_venta.idventa=re_ventapago.idventa AND re_venta.estado=1 AND re_ventapago.estado=1 ),0) AS pagado,

en este subquery no tienes ni A ni B y no te lo reconoce como una funcion de agregado, podrias tratar con:

isnull((SELECT sum(case re_ventapago.moneda when 1 then re_ventapago.importe/re_venta.tipocambio else re_ventapago.importe end) FROM re_ventapago,re_venta WHERE re_ventapago.idventafactura=b.idventa AND re_venta.idventa=re_ventapago.idventa AND re_venta.estado=1 AND re_ventapago.estado=1 ),0) AS pagado,


es lo que veo porque la verdad tu query esta muy rebuscado.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 02/05/2012, 15:22
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: Se han especificado múltiples columnas en una expresión de agregado que co

¿Rebuscado?, ¿NO?, ¿En serio?.......
__________________
MCTS Isaias Islas

Etiquetas: agregado, columnas, fecha, procedimiento, select, tabla, almacenar, campos
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 02:51.