Autor Tema: Problema con un alias que no puedo operar  (Leído 3884 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado auron3098

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 2
  • -Receive: 17
  • Mensajes: 433
  • Esta es mi historia, y tú no formas parte de ella
Problema con un alias que no puedo operar
« : abril 07, 2014, 04:49:37 pm »
Saludos mis estimados, este día quise ahorrarme el trabajo que suelo hacer en excel y hacer un query simple que me haga todo el trabajo de un solo, no es ni complicado, a continuación lo detallo:

Tengo una tabla la cual multiplico 2 campos para sacar TOTAL_COMPRADO y multiplico otros 2 campos para sacar TOTAL_VENDIDO. cuando tengo ambos campos, me dispuse a hacer una resta de los 2 campos con alias, es decir TOTAL_VENDIDO - TOTAL_COMPRADO y es ahi donde me da problemas.

MI QUERY ES:
Código: [Seleccionar]
SELECT
T_RETACEOS.DESCRIPCION,
T_RETACEOS.NUM_FACTURA,
T_RETACEOS.PROVEEDOR,
T_RETACEOS.COSTO,
T_RETACEOS.CANTIDAD AS INGRESO,
(T_RETACEOS.COSTO * T_RETACEOS.CANTIDAD) AS TOTAL_COMPRADO,
(SELECT SUM(VENTAS.CANTIDAD)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) AS CANTIDAD_VENDIDO,
(SELECT SUM(VENTAS.PRECIO)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) AS TOTAL_VENDIDO,
(TOTAL_VENDIDO - TOTAL_COMPRADO) AS GANANCIA // este no me lo opera
FROM T_RETACEOS
ORDER BY T_RETACEOS.DESCRIPCION
*Si elimino la linea de "(TOTAL_VENDIDO - TOTAL_COMPRADO)" AS GANANCIA todo me funciona bien, es algo que podria hacer en excel pero la idea es ahorrar tiempo

EL PROBLEMA QUE ME DA EL SQL ES:
Código: [Seleccionar]
Msg 207, Level 16, State 1, Line 10
Invalid column name 'TOTAL_VENDIDO'.
Msg 207, Level 16, State 1, Line 10
Invalid column name 'TOTAL_COMPRADO'.

Se que tiene que ver con los alias, pero no le he hallado solución, les agradeceré su ayuda mis estimados  :drinks:
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor, RammeGulp
« Última Modificación: abril 07, 2014, 04:56:05 pm por auron3098 »
http://raptr.com/badge/auron3098/fs_overall.png

Desconectado mxgxw

  • Global Moderator
  • Trade Count: (1)
  • The Communiter-
  • *
  • Thank You
  • -Given: 27
  • -Receive: 652
  • Mensajes: 5660
  • Starlet - 999cc
    • mxgxw
Re:Problema con un alias que no puedo operar
« Respuesta #1 : abril 07, 2014, 05:51:29 pm »
Saludos mis estimados, este día quise ahorrarme el trabajo que suelo hacer en excel y hacer un query simple que me haga todo el trabajo de un solo, no es ni complicado, a continuación lo detallo:

Tengo una tabla la cual multiplico 2 campos para sacar TOTAL_COMPRADO y multiplico otros 2 campos para sacar TOTAL_VENDIDO. cuando tengo ambos campos, me dispuse a hacer una resta de los 2 campos con alias, es decir TOTAL_VENDIDO - TOTAL_COMPRADO y es ahi donde me da problemas.

MI QUERY ES:
Código: [Seleccionar]
SELECT
T_RETACEOS.DESCRIPCION,
T_RETACEOS.NUM_FACTURA,
T_RETACEOS.PROVEEDOR,
T_RETACEOS.COSTO,
T_RETACEOS.CANTIDAD AS INGRESO,
(T_RETACEOS.COSTO * T_RETACEOS.CANTIDAD) AS TOTAL_COMPRADO,
(SELECT SUM(VENTAS.CANTIDAD)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) AS CANTIDAD_VENDIDO,
(SELECT SUM(VENTAS.PRECIO)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) AS TOTAL_VENDIDO,
(TOTAL_VENDIDO - TOTAL_COMPRADO) AS GANANCIA // este no me lo opera
FROM T_RETACEOS
ORDER BY T_RETACEOS.DESCRIPCION
*Si elimino la linea de "(TOTAL_VENDIDO - TOTAL_COMPRADO)" AS GANANCIA todo me funciona bien, es algo que podria hacer en excel pero la idea es ahorrar tiempo

EL PROBLEMA QUE ME DA EL SQL ES:
Código: [Seleccionar]
Msg 207, Level 16, State 1, Line 10
Invalid column name 'TOTAL_VENDIDO'.
Msg 207, Level 16, State 1, Line 10
Invalid column name 'TOTAL_COMPRADO'.

Se que tiene que ver con los alias, pero no le he hallado solución, les agradeceré su ayuda mis estimados  :drinks:

Que server de SQL estás usando, hay algunos gestores que no soportan que hagas referencia a ALIAS, tenes que poner el cálculo completo, es decir, en lugar de tener:

Código: [Seleccionar]
(TOTAL_VENDIDO - TOTAL_COMPRADO) AS GANANCIA

Tenes que poner:

Código: [Seleccionar]
(SELECT SUM(VENTAS.PRECIO)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) - (T_RETACEOS.COSTO * T_RETACEOS.CANTIDAD) AS GANANCIA
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor


Desconectado tekun

  • -^- Elite Silver -^-
  • Trade Count: (1)
  • The Communiter-
  • *
  • Thank You
  • -Given: 53
  • -Receive: 101
  • Mensajes: 3193
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:Problema con un alias que no puedo operar
« Respuesta #2 : abril 07, 2014, 06:09:45 pm »
Que server de SQL estás usando, hay algunos gestores que no soportan que hagas referencia a ALIAS, tenes que poner el cálculo completo, es decir, en lugar de tener:

Código: [Seleccionar]
(TOTAL_VENDIDO - TOTAL_COMPRADO) AS GANANCIA

Tenes que poner:

Código: [Seleccionar]
(SELECT SUM(VENTAS.PRECIO)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) - (T_RETACEOS.COSTO * T_RETACEOS.CANTIDAD) AS GANANCIA

o mejor aún que cree una vista y que luego en la vista haga la resta...


btw: hacer relaciones por campo "descripcion" que posiblemente son campos varchar no es una buena idea... en fin!
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Neon08

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 12
  • -Receive: 23
  • Mensajes: 267
  • Perdí mi apuesta por el rock and roll
Re:Problema con un alias que no puedo operar
« Respuesta #3 : abril 07, 2014, 06:17:37 pm »
Haz verificado si los campos en cuestión poseen valores nulos?
A veces pasa cuando quieres operarlos, del mismo modo si son decimal e int creo que tenes que tener cuidado con ello, por lo demás creo que podrías hacer las operaciones de total vendido menos total comprado en una sola linea sin instancia los nombres de los que creas al inicio.

Espero sea de ayuda

Saludos
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor, RammeGulp
La gran victoria que hoy parece fácil fue el resultado de pequeñas victorias que pasaron desapercibidas.

Desconectado tekun

  • -^- Elite Silver -^-
  • Trade Count: (1)
  • The Communiter-
  • *
  • Thank You
  • -Given: 53
  • -Receive: 101
  • Mensajes: 3193
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:Problema con un alias que no puedo operar
« Respuesta #4 : abril 08, 2014, 08:58:00 am »
Haz verificado si los campos en cuestión poseen valores nulos?
A veces pasa cuando quieres operarlos, del mismo modo si son decimal e int creo que tenes que tener cuidado con ello, por lo demás creo que podrías hacer las operaciones de total vendido menos total comprado en una sola linea sin instancia los nombres de los que creas al inicio.

Espero sea de ayuda

Saludos

el problema del muchacho es que no puede "Crear" campos al vuelo y operar con ellos, no es problema de valores nulos...

en postgres por ejemplo, yo puedo hacer lo siguiente

select *,campox+campoy as suma
from (
     select 1 as campox, 2 as campoy
) as xx

eso no es una tabla, son registros que el "poderoso" postgres reconoce como tal y los opera....

intenten hacer eso en su rdbms favorita y expongan resultados
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado mxgxw

  • Global Moderator
  • Trade Count: (1)
  • The Communiter-
  • *
  • Thank You
  • -Given: 27
  • -Receive: 652
  • Mensajes: 5660
  • Starlet - 999cc
    • mxgxw
Re:Problema con un alias que no puedo operar
« Respuesta #5 : abril 08, 2014, 09:07:45 am »
el problema del muchacho es que no puede "Crear" campos al vuelo y operar con ellos, no es problema de valores nulos...

en postgres por ejemplo, yo puedo hacer lo siguiente

select *,campox+campoy as suma
from (
     select 1 as campox, 2 as campoy
) as xx

eso no es una tabla, son registros que el "poderoso" postgres reconoce como tal y los opera....

intenten hacer eso en su rdbms favorita y expongan resultados


En SQL Server por ejemplo no se puede. Pero en MySQL creo que si podes hacer referencia a los alias, depende del gestor.

Como bien decis, es mejor hacer una vista y operar sobre la vista. O si realmente estás interesado en tener un performance muy bueno (y digamos solo te interesa tener el resultado al final del día), podes crear una tabla temporal con el select intermedio y operar sobre ella.
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor


Desconectado Neon08

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 12
  • -Receive: 23
  • Mensajes: 267
  • Perdí mi apuesta por el rock and roll
Re:Problema con un alias que no puedo operar
« Respuesta #6 : abril 08, 2014, 09:14:59 am »
el problema del muchacho es que no puede "Crear" campos al vuelo y operar con ellos, no es problema de valores nulos...

en postgres por ejemplo, yo puedo hacer lo siguiente

select *,campox+campoy as suma
from (
     select 1 as campox, 2 as campoy
) as xx

eso no es una tabla, son registros que el "poderoso" postgres reconoce como tal y los opera....

intenten hacer eso en su rdbms favorita y expongan resultados
Ok pero si esta con SQL Server yo siempre los he operado asi por ejemplo

Código: [Seleccionar]
select cantidad*precio as Total
from itemorden

El error que podría encontrar y que es muy común es que luego de declarar ese Total quiera ocuparlo como argumento de otra operación dentro del mismo select, por ejemplo:

Código: [Seleccionar]
select cantidad*precio as Total,
Total*2 as Total2
from itemorden
Lo que me tocaría hacer es nuevamente calcular el total si quiero instanciar esa operación dentro del mismo select... xD espero no estarme yendo por la tangente.

Saludos
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor, RammeGulp
La gran victoria que hoy parece fácil fue el resultado de pequeñas victorias que pasaron desapercibidas.

Desconectado chepito123

  • Trade Count: (0)
  • Sv Full Member
  • *
  • Thank You
  • -Given: 9
  • -Receive: 43
  • Mensajes: 745
Re:Problema con un alias que no puedo operar
« Respuesta #7 : abril 08, 2014, 09:17:01 am »
Yo probaría hacer las consultas de esta forma

Citar
--Para sacar la ganancia
SELECT
   (SELECT SUM(VENTAS.PRECIO)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) AS TOTAL_VENDIDO,
   (T_RETACEOS.COSTO * T_RETACEOS.CANTIDAD) AS TOTAL_COMPRADO
INTO #TMP_CAMPOS_GANANCIA
FROM T_RETACEOS

--CONSULTA GENERAL
SELECT
T_RETACEOS.DESCRIPCION,
T_RETACEOS.NUM_FACTURA,
T_RETACEOS.PROVEEDOR,
T_RETACEOS.COSTO,
T_RETACEOS.CANTIDAD AS INGRESO,
(SELECT TOTAL_COMPRADO FROM #TMP_CAMPOS_GANANCIA) AS TOTAL_COMPRADO,
(SELECT SUM(VENTAS.CANTIDAD)FROM VENTAS WHERE VENTAS.DESCRIPCION = T_RETACEOS.DESCRIPCION) AS CANTIDAD_VENDIDO,
(SELECT (TOTAL_VENDIDO) FROM #TMP_CAMPOS_GANANCIA) AS TOTAL_VENDIDO,
(SELECT (TOTAL_VENDIDO - TOTAL_COMPRADO) FROM #TMP_CAMPOS_GANANCIA) AS GANANCIA
FROM T_RETACEOS
ORDER BY T_RETACEOS.DESCRIPCION
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor, RammeGulp
Lo que cuenta en la vida no es el mero hecho de haber vivido. Son los cambios que hemos provocado en las vidas de los demás lo que determina el significado de la nuestra

Desconectado tekun

  • -^- Elite Silver -^-
  • Trade Count: (1)
  • The Communiter-
  • *
  • Thank You
  • -Given: 53
  • -Receive: 101
  • Mensajes: 3193
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:Problema con un alias que no puedo operar
« Respuesta #8 : abril 08, 2014, 09:39:44 am »
En SQL Server por ejemplo no se puede.

 :yao_ming:


imaginate ahora esos campos cálculados en un "group by" u "order by" ha de ser algo impensable en SQL Server...  :dumb:


la verdad le doy gracias a Sicario por presentarme a Postgres, no se que sería de mí si no lo utilizara.... :wub: ... llegar a crear tablas temporales sólo por trabajar con un campo calculado es una solución de hace mas de 10 años
Follow members gave a thank to your post:
Abrekilord, ypopwto63, rubortumorcalordolor
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito