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

ERROR no se puede convertir datos varchar a numeric

Estas en el tema de ERROR no se puede convertir datos varchar a numeric en el foro de SQL Server en Foros del Web. Buenas noches.... Estimados Foristas Experos en SQL SERVER. Tanto buscar y buscar, no encuentro una solución específica, o únicamente, algo que me oriente a terminar ...
  #1 (permalink)  
Antiguo 22/02/2013, 06:41
 
Fecha de Ingreso: marzo-2006
Mensajes: 43
Antigüedad: 18 años, 1 mes
Puntos: 0
Exclamación ERROR no se puede convertir datos varchar a numeric

Buenas noches....

Estimados Foristas Experos en SQL SERVER.

Tanto buscar y buscar, no encuentro una solución específica, o únicamente, algo que me oriente a terminar mi reporte necesario para mi pequeño Restaurant.

Lo único que me hace falta, es sacar el promedio y que la sintaxis nombrada, funcione para SQL SERVER 2005, ya que en 2008 funciona perfecto.

Si de algunos de ustedes, se ofrecen a prestar una ayuda comunitaria, estaría agradecido.

Lo primero:

Código MySQL:
Ver original
  1. SELECT CASE REGIMEN
  2. WHEN 1 THEN 'DESAYUNO'
  3. WHEN 2 THEN 'ALMUERZO'
  4. WHEN 3 THEN 'CENA'
  5. END "REGIMEN", CONVERT(VARCHAR(10),SUM(BASEIMPONIBLE)) + ' Bs.' AS 'BASE IMPONIBLE',
  6.  
  7. WHEN REGIMEN = 1 THEN CAST(CONVERT(VARCHAR(50),CONVERT(NUMERIC(10,2),SUM(BASEIMPONIBLE)) * 100 / (SELECT SUM(BASEIMPONIBLE)
  8. FROM NUEVO_REST_IKEA.DBO.IkeaHorasReporteAgrupado))AS VARCHAR(10)) + '%'
  9. /*CONVERT(VARCHAR(10),SUM(TIQUETSCAB.NUMCOMENSALES) * 100 / 300) + '%' AS 'PROMEDIO'*/
  10. WHEN REGIMEN = 2 THEN CONVERT(DECIMAL(10,2),SUM(BASEIMPONIBLE) * 100 / (SELECT SUM(BASEIMPONIBLE)
  11. FROM NUEVO_REST_IKEA.DBO.IkeaHorasReporteAgrupado))
  12. /*NUMERIC = LO MISMO QUE DECIMAL */
  13. WHEN REGIMEN = 3 THEN CONVERT(DECIMAL(10,2),SUM(BASEIMPONIBLE) * 100 / (SELECT SUM(BASEIMPONIBLE)
  14. FROM NUEVO_REST_IKEA.DBO.IkeaHorasReporteAgrupado))
  15. /*=(B1*100/(B1+B2+B3)) */
  16. END "PROMEDIO",
  17.  
  18. SUM(COMENSALES) AS 'COMENSALES'
  19. FROM NUEVO_REST_IKEA.DBO.IkeaHorasReporteAgrupado
  20. GROUP BY REGIMEN

Fíjense en la línea Número 9.

Me da el error mostrado:
ERROR no se puede convertir datos varchar a numeric
¿Por qué? En la línea 5 no me ofreció inconveniente, y aquí si.

Al parecer no estoy haciendo la conversión verdadara O NO se le añade caracteres a números decimales.

Lo segundo:

Código SQL:
Ver original
  1. SELECT CASE REGIMEN
  2. WHEN 1 THEN 'DESAYUNO'
  3. WHEN 2 THEN 'ALMUERZO'
  4. WHEN 3 THEN 'CENA' ELSE 'FUERA DE RANGO'
  5. END "REGIMEN",
  6.  
  7. CONVERT(VARCHAR(10),SUM(BASEIMPONIBLE)) + ' Bs.' AS 'BASE IMPONIBLE',
  8.  
  9. CASE
  10. WHEN REGIMEN = 1 THEN CAST(CONVERT(DECIMAL(10,2),SUM(BASEIMPONIBLE) * 100 / (SELECT SUM(BASEIMPONIBLE)
  11. FROM NUEVO_REST_IKEA.DBO.IkeaHorasReporteAgrupado WHERE FECHA >= '20130101' AND FECHA <= '20130131'))AS VARCHAR(10))
  12. /*CONVERT(VARCHAR(10),SUM(TIQUETSCAB.NUMCOMENSALES) * 100 / 300) + '%' AS 'PROMEDIO'*/
  13. WHEN REGIMEN = 2 THEN CAST(CONVERT(DECIMAL(10,2),SUM(BASEIMPONIBLE) * 100 / (SELECT SUM(BASEIMPONIBLE)
  14. FROM NUEVO_REST_IKEA.DBO.IkeaHorasReporteAgrupado WHERE FECHA >= '20130101' AND FECHA <= '20130131'))AS VARCHAR(10))
  15. /*NUMERIC = LO MISMO QUE NUMERIC */
  16. WHEN REGIMEN = 3 THEN CAST(CONVERT(DECIMAL(10,2),SUM(BASEIMPONIBLE) * 100 / (SELECT SUM(BASEIMPONIBLE)
  17. FROM NUEVO_REST_IKEA.DBO.IkeaHorasReporteAgrupado WHERE FECHA >= '20130101' AND FECHA <= '20130131'))AS VARCHAR(10))
  18. /*=(B1*100/(B1+B2+B3)) */
  19. END "PROMEDIO"
  20.  
  21. FROM IkeaHorasReporteAGrupado
  22. WHERE FECHA >= '20130101' AND FECHA <= '20130131'
  23. GROUP BY REGIMEN ORDER BY SUM(BASEIMPONIBLE) ASC

La sintaxis funciona correctamente (ya cuando desistí de agregarle el % adicional). Únicamente que en SQL 2005, no me funciona.

Comenta algo sobre la cláusala WHERE con EXISTS tal... ¿Será por los SELECT´s anidados? Quitándolo, me funciona.

Ahí ustedes pueden ver la conversión o el promedio que se le saca al 100%.

Agradecidos por sus comentarios y objeciones.

Saludos.
__________________
:si: ANTARES:si:
  #2 (permalink)  
Antiguo 22/02/2013, 09:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ERROR no se puede convertir datos varchar a numeric

sera porque quieres agregarle un % a la tabla del select???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/02/2013, 11:00
 
Fecha de Ingreso: marzo-2006
Mensajes: 43
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: ERROR no se puede convertir datos varchar a numeric

Cita:
Iniciado por libras
sera porque quieres agregarle un % a la tabla del select???
Mmm! Puede ser... Pero intenté de 1 y 10 formas y no consigo agregarle....

Estoy casi seguro que ese SELECT me está descuadrando ahí. Pero necesito hacer la selección de esa BASE IMPONIBLE total, para dividirlo con el resultado de al lado.

No sé si creando una tabla temporal, creando un select temporal y usando alguna variable y usarla.

Ni me deja agregar el '%' y la sintaxis no me la reconoce SQL 2005.

No sé como podría hacer para anidar ese SELECT. O conjugarlo, o sacar el total de algún lado y colocarla ahí, es lo que necesito.

Y eso que todo lo estoy basando de una vista, por que si fuese 1 solo SELECT jeje!....

Agradecido Libras.

Saludos.
__________________
:si: ANTARES:si:
  #4 (permalink)  
Antiguo 22/02/2013, 11:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ERROR no se puede convertir datos varchar a numeric

puedes poner cual es el error que te arroja??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 22/02/2013, 12:33
 
Fecha de Ingreso: marzo-2006
Mensajes: 43
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: ERROR no se puede convertir datos varchar a numeric

Que tal nuevamente, amigo Libras.

Cita:
Iniciado por Libras Ver Mensaje
puedes poner cual es el error que te arroja??
En el de colocar el "%" luego de los números, me arroja esto:

ERROR no se puede convertir datos varchar a numeric

Y en el otro código, ya luego modificado, sin anidar el "%", me lo efectúa perfectamente en SQL 2008, pero en el 2005, me da el siguiente error:

Error ejecutando la consula SQL. Causa: Sólo se puede especificar una expresión en al lista de selección cuando la subconsulta no se especifica con EXISTS


Cordial saludo, estimado.
__________________
:si: ANTARES:si:
  #6 (permalink)  
Antiguo 24/02/2013, 07:40
 
Fecha de Ingreso: marzo-2006
Mensajes: 43
Antigüedad: 18 años, 1 mes
Puntos: 0
Exclamación Respuesta: ERROR no se puede convertir datos varchar a numeric

Buenos días.

Quisiera saber, si al menos poseen una alternativa de concatenar o agregar un carácter o letra al lado de ese promedio o tipo de dato?

Diría, si existen opciones para probar.

¿O como podría sacar cuenta de todo el promedio y usarlo como una variable temporal?. Para no sacar cuenta por el SELECT, ya que no me lo reconoce el SQL 2005.

Agradecido nuevamente.

Cordial saludo.
__________________
:si: ANTARES:si:

Etiquetas: case, promedio, server, sql, varchar
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 08:02.