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

Separar y sumar datos de una misma columna

Estas en el tema de Separar y sumar datos de una misma columna en el foro de SQL Server en Foros del Web. Hola a todos lo que necesito es lo siguiente. Tengo una tabla llamada trafico en la cual rescato los siguientes campos: movil, servicio, valor , ...
  #1 (permalink)  
Antiguo 11/05/2009, 13:52
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
De acuerdo Separar y sumar datos de una misma columna (SOLUCIONADO)

Hola a todos lo que necesito es lo siguiente. Tengo una tabla llamada trafico en la cual rescato los siguientes campos: movil, servicio, valor , sobrecargo pero valor y sobrecargo los necesito suma
lo hago asi sum(valor + sobrecargo ) as total

pero ahora el problema es el siguiente en sobrecargo tengo los siguientes campos BAM, MMS, RPV, SME, SMR, TEL y TLL de los cuales obtengo el valor y sobregargo pero ahora los necesito separados por cada uno de ellos osea algo asi sum(valor + sobrecargo) where servicio = 'BAM' pero asi con cada uno de ellos y que se vean en una tabla y no se me ocurre.

Si alguien sabe como poder hacer esta suma por cada dato separado dentro de una misma consulta se lo agradesco
desde ya muchas gracias
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"

Última edición por TonyChile; 13/05/2009 a las 10:29 Razón: Problema Resuelto
  #2 (permalink)  
Antiguo 11/05/2009, 13:54
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

haz probado hacerlo con un case when

por ejemplo

Código sql:
Ver original
  1. SELECT
  2. CASE WHEN servicio = 'BAM'  THEN SUM(valor+sobrecargo) ELSE 0 END AS BAM,
  3. CASE WHEN servicio = 'MMS'  THEN SUM(valor+sobrecargo) ELSE 0 END AS MMS
  4. FROM tabla

nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #3 (permalink)  
Antiguo 11/05/2009, 14:16
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Gracias GeoAvila me funciono perfecto aca dejo la consulta completa por si le sirve a alguien de ejemplo

Código sql:
Ver original
  1. SELECT     factura, movil, SUM(valor + sobrecargo) AS total, CASE WHEN servicio = 'BAM' THEN SUM(valor + sobrecargo) ELSE 0 END AS BAM,
  2.                       CASE WHEN servicio = 'MMS' THEN SUM(valor + sobrecargo) ELSE 0 END AS MMS, CASE WHEN servicio = 'RPV' THEN SUM(valor + sobrecargo)
  3.                       ELSE 0 END AS RPV, CASE WHEN servicio = 'SME' THEN SUM(valor + sobrecargo) ELSE 0 END AS SME,
  4.                       CASE WHEN servicio = 'SMR' THEN SUM(valor + sobrecargo) ELSE 0 END AS SMR, CASE WHEN servicio = 'TEL' THEN SUM(valor + sobrecargo)
  5.                       ELSE 0 END AS TEL, CASE WHEN servicio = 'TLL' THEN SUM(valor + sobrecargo) ELSE 0 END AS TLL
  6. FROM         trafico
  7. WHERE     factura = '16209216'
  8. GROUP BY factura, movil, servicio

Muchas gracias GeoAvila fue una respuesta rapida y precisa se agradece
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #4 (permalink)  
Antiguo 11/05/2009, 14:30
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Wou hay algo que tengo q modificar como puedo hacer que se muestren dentro de las misma linea y no de forma sucesiva como me esta saliendo de momento
asi es como salen:

Código sql:
Ver original
  1. 77611111    16209216    0   0   0   0   0   5113    0
  2. 77611111    16209216    0   0   4178    0   0   0   0
  3. 77622222    16209216    0   0   0   0   0   9815    0
  4. 77622222    16209216    0   0   0   2100    0   0   0
  5. 77622222    16209216    0   0   106 0   0   0   0
  6. 77633333    16209216    0   0   0   0   0   12922   0
  7. 77633333    16209216    0   0   863 0   0   0   0

y lo necesito asi:
Código sql:
Ver original
  1. 77611111    16209216    0   0   4178    0   0   5113    0 y aca la suma total 9291
  2. 77622222    16209216    0   0   106 2100    0   9815    0 y aca la suma total 12021

y asi sucesivamente
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"

Última edición por TonyChile; 11/05/2009 a las 14:42
  #5 (permalink)  
Antiguo 11/05/2009, 15:38
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

ups.. no comprendo bien la pregunta, la suma porque no sale, si agregas la columna debe salir, alli..

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #6 (permalink)  
Antiguo 12/05/2009, 07:45
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

No si sale pero en vez de que salga la suma total por cada numero de celular la suma en forma linial mms, rpv,etc pero cada uno por separado y necesito que aparesca la suma total de ellas y que los totales por servicio (mms, rpv,etc) aparescan en la misma fila y el total de la suma de ellos tambien en la fila pero en la columna de total general

asi:
Código sql:
Ver original
  1. 77611111    16209216    0   0   4178    0   0   5113    0 y aca la suma total 9291
  2. 77622222    16209216    0   0   106 2100    0   9815    0 y aca la suma total 12021

Ahora se entiende mas o no?
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #7 (permalink)  
Antiguo 12/05/2009, 09:49
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por TonyChile Ver Mensaje
No si sale pero en vez de que salga la suma total por cada numero de celular la suma en forma linial mms, rpv,etc pero cada uno por separado y necesito que aparesca la suma total de ellas y que los totales por servicio (mms, rpv,etc) aparescan en la misma fila y el total de la suma de ellos tambien en la fila pero en la columna de total general

asi:
Código sql:
Ver original
  1. 77611111    16209216    0   0   4178    0   0   5113    0 y aca la suma total 9291
  2. 77622222    16209216    0   0   106 2100    0   9815    0 y aca la suma total 12021

Ahora se entiende mas o no?
la suma total no tiene que llevar case when unicamente sum para que te sume el total general.

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #8 (permalink)  
Antiguo 12/05/2009, 09:58
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Cita:
GeoAvila
la suma total no tiene que llevar case when unicamente sum para que te sume el total general.
pero si no lo lleva mira:
Código sql:
Ver original
  1. SELECT     factura, movil, SUM(valor + sobrecargo) AS total, CASE WHEN servicio = 'BAM' THEN SUM(valor + sobrecargo) ELSE 0 END AS BAM,
  2.                       CASE WHEN servicio = 'MMS' THEN SUM(valor + sobrecargo) ELSE 0 END AS MMS, CASE WHEN servicio = 'RPV' THEN SUM(valor + sobrecargo)
  3.                       ELSE 0 END AS RPV, CASE WHEN servicio = 'SME' THEN SUM(valor + sobrecargo) ELSE 0 END AS SME,
  4.                       CASE WHEN servicio = 'SMR' THEN SUM(valor + sobrecargo) ELSE 0 END AS SMR, CASE WHEN servicio = 'TEL' THEN SUM(valor + sobrecargo)
  5.                       ELSE 0 END AS TEL, CASE WHEN servicio = 'TLL' THEN SUM(valor + sobrecargo) ELSE 0 END AS TLL
  6. FROM         trafico
  7. WHERE     factura = '16209216'
  8. GROUP BY factura, movil, servicio

ves esta al principio del select
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #9 (permalink)  
Antiguo 12/05/2009, 10:19
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por TonyChile Ver Mensaje
pero si no lo lleva mira:
Código sql:
Ver original
  1. SELECT     factura, movil, SUM(valor + sobrecargo) AS total, CASE WHEN servicio = 'BAM' THEN SUM(valor + sobrecargo) ELSE 0 END AS BAM,
  2.                       CASE WHEN servicio = 'MMS' THEN SUM(valor + sobrecargo) ELSE 0 END AS MMS, CASE WHEN servicio = 'RPV' THEN SUM(valor + sobrecargo)
  3.                       ELSE 0 END AS RPV, CASE WHEN servicio = 'SME' THEN SUM(valor + sobrecargo) ELSE 0 END AS SME,
  4.                       CASE WHEN servicio = 'SMR' THEN SUM(valor + sobrecargo) ELSE 0 END AS SMR, CASE WHEN servicio = 'TEL' THEN SUM(valor + sobrecargo)
  5.                       ELSE 0 END AS TEL, CASE WHEN servicio = 'TLL' THEN SUM(valor + sobrecargo) ELSE 0 END AS TLL
  6. FROM         trafico
  7. WHERE     factura = '16209216'
  8. GROUP BY factura, movil, servicio

ves esta al principio del select
Deja el grupamiento unidmante por factura y movil, quita servicio del agrupamiento..

nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #10 (permalink)  
Antiguo 12/05/2009, 10:25
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Cita:
Deja el grupamiento unidmante por factura y movil, quita servicio del agrupamiento..
nos vemos.
Si pero si hago eso me da error que es: trafico.servicio es invalido en la sentencia select ya que no se encuentra en la sentencia de agrupamiento group by
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #11 (permalink)  
Antiguo 12/05/2009, 10:39
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por TonyChile Ver Mensaje
Si pero si hago eso me da error que es: trafico.servicio es invalido en la sentencia select ya que no se encuentra en la sentencia de agrupamiento group by

entonces ha de haber algo distinto dentro de esos, o bien hace un sub select(select anidado) para la toma total

or ejemplop

Código sql:
Ver original
  1. SELECT
  2. (SELECT SUM(valor+sobrecargo)
  3. FROM trafico
  4. WHERE factura=a.factura AND movil = a.movil)
  5. --aqui todo lo demas
  6. FROM traficio a
  7. --codiciones y agrupamientos aqui.

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #12 (permalink)  
Antiguo 12/05/2009, 12:54
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Ahora si los suma lo hice de esta forma:

Código sql:
Ver original
  1. SELECT     factura, movil,
  2.                           (SELECT     SUM(valor + sobrecargo) AS TOTAL
  3.                             FROM          trafico
  4.                             WHERE      factura = a.factura AND movil = a.movil), SUM(valor + sobrecargo) AS total, CASE WHEN servicio = 'BAM' THEN SUM(valor + sobrecargo)
  5.                       ELSE 0 END AS BAM, CASE WHEN servicio = 'MMS' THEN SUM(valor + sobrecargo) ELSE 0 END AS MMS,
  6.                       CASE WHEN servicio = 'RPV' THEN SUM(valor + sobrecargo) ELSE 0 END AS RPV, CASE WHEN servicio = 'SME' THEN SUM(valor + sobrecargo)
  7.                       ELSE 0 END AS SME, CASE WHEN servicio = 'SMR' THEN SUM(valor + sobrecargo) ELSE 0 END AS SMR,
  8.                       CASE WHEN servicio = 'TEL' THEN SUM(valor + sobrecargo) ELSE 0 END AS TEL, CASE WHEN servicio = 'TLL' THEN SUM(valor + sobrecargo)
  9.                       ELSE 0 END AS TLL
  10. FROM         trafico a
  11. WHERE     factura = '16209216'
  12. GROUP BY factura, movil, servicio

Pero aun sigen saliendo los tipos de servicios en diferentes lineas (bam,mms,etc hacia abajo) la idea es que salgan en una sola linea todos hacia al lado
Como me esta saliendo es asi:

con este orden:
factura, movil, total general(se ve sin nombre), total(por cada uno), bam, mms, rpv, sme, smr, tel, tll

Código sql:
Ver original
  1. 16209216    77611111    19353   11940   0   0   0   0   0   11940   0
  2. 16209216    77611111    19353   5061    0   0   5061    0   0   0   0
  3. 16209216    77611111    19353   2352    0   0   0   2352    0   0   0
  4. 16209216    77622222    23719   6897    0   0   6897    0   0   0   0
  5. 16209216    77622222    23719   986 0   0   0   0   986 0   0
  6. 16209216    77622222    23719   15836   0   0   0   0   0   15836   0
  7. 16209216    77633333    11706   4452    0   0   0   4452    0   0   0
  8. 16209216    77633333    11706   6689    0   0   0   0   0   6689    0
  9. 16209216    77633333    11706   565 0   0   565 0   0   0   0

La idea seria esta:


Código sql:
Ver original
  1. 16209216    77611111    19353   11940   0   0   5061    2352    0   11940   0
  2. 16209216    77622222    23719   6897    0   0   6897    0   986 15836   0
  3. 16209216    77633333    11706   4452    0   0   565 4452    0   6689    0
Y muchas gracias y disculpa todas las molestiias ocacionadas GeoAvila
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #13 (permalink)  
Antiguo 12/05/2009, 13:29
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por TonyChile Ver Mensaje
Ahora si los suma lo hice de esta forma:

Código sql:
Ver original
  1. SELECT     factura, movil,
  2.                           (SELECT     SUM(valor + sobrecargo) AS TOTAL
  3.                             FROM          trafico
  4.                             WHERE      factura = a.factura AND movil = a.movil), SUM(valor + sobrecargo) AS total, CASE WHEN servicio = 'BAM' THEN SUM(valor + sobrecargo)
  5.                       ELSE 0 END AS BAM, CASE WHEN servicio = 'MMS' THEN SUM(valor + sobrecargo) ELSE 0 END AS MMS,
  6.                       CASE WHEN servicio = 'RPV' THEN SUM(valor + sobrecargo) ELSE 0 END AS RPV, CASE WHEN servicio = 'SME' THEN SUM(valor + sobrecargo)
  7.                       ELSE 0 END AS SME, CASE WHEN servicio = 'SMR' THEN SUM(valor + sobrecargo) ELSE 0 END AS SMR,
  8.                       CASE WHEN servicio = 'TEL' THEN SUM(valor + sobrecargo) ELSE 0 END AS TEL, CASE WHEN servicio = 'TLL' THEN SUM(valor + sobrecargo)
  9.                       ELSE 0 END AS TLL
  10. FROM         trafico a
  11. WHERE     factura = '16209216'
  12. GROUP BY factura, movil, servicio

Pero aun sigen saliendo los tipos de servicios en diferentes lineas (bam,mms,etc hacia abajo) la idea es que salgan en una sola linea todos hacia al lado
Como me esta saliendo es asi:

con este orden:
factura, movil, total general(se ve sin nombre), total(por cada uno), bam, mms, rpv, sme, smr, tel, tll

Código sql:
Ver original
  1. 16209216    77611111    19353    11940    0    0    0    0    0    11940    0
  2. 16209216    77611111    19353    5061    0    0    5061    0    0    0    0
  3. 16209216    77611111    19353    2352    0    0    0    2352    0    0    0
  4. 16209216    77622222    23719    6897    0    0    6897    0    0    0    0
  5. 16209216    77622222    23719    986    0    0    0    0    986    0    0
  6. 16209216    77622222    23719    15836    0    0    0    0    0    15836    0
  7. 16209216    77633333    11706    4452    0    0    0    4452    0    0    0
  8. 16209216    77633333    11706    6689    0    0    0    0    0    6689    0
  9. 16209216    77633333    11706    565    0    0    565    0    0    0    0

La idea seria esta:


Código sql:
Ver original
  1. 16209216    77611111    19353    11940    0    0    5061    2352    0    11940    0
  2. 16209216    77622222    23719    6897    0    0    6897    0    986    15836    0
  3. 16209216    77633333    11706    4452    0    0    565    4452    0    6689    0
Y muchas gracias y disculpa todas las molestiias ocacionadas GeoAvila
hace el select primario solo por factura y movil y luego hace los selects anidados para sacar cada una de las columnas.

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #14 (permalink)  
Antiguo 12/05/2009, 13:43
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

te refieres a que al principio vaya esto:

SELECT factura, movil,
(SELECT SUM(valor + sobrecargo)

porque ya esta asi
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #15 (permalink)  
Antiguo 12/05/2009, 13:59
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por TonyChile Ver Mensaje
te refieres a que al principio vaya esto:

SELECT factura, movil,
(SELECT SUM(valor + sobrecargo), (SELECT SUM(valor + sobrecargo)where servicio = 'XXX')

porque ya esta asi
de esta manera selects anidados por servicio..


SELECT factura, movil,
(SELECT SUM(valor + sobrecargo), (SELECT SUM(valor + sobrecargo)where servicio = 'XXX')

nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #16 (permalink)  
Antiguo 12/05/2009, 14:50
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Mira si lo dejo asi
Código sql:
Ver original
  1. SELECT     FACTURA, MOVIL,
  2.        (SELECT     SUM(valor + sobrecargo),
  3.           (SELECT     SUM(valor + sobrecargo)
  4.             WHERE      SERVICIO = 'BAM') AS BAM,
  5.           (SELECT     SUM(valor + sobrecargo)
  6.             WHERE      SERVICIO = 'MMS') AS MMS,
  7.           (SELECT     SUM(valor + sobrecargo)
  8.             WHERE      SERVICIO = 'RPV') AS RPV,
  9.           (SELECT     SUM(valor + sobrecargo)
  10.             WHERE      SERVICIO = 'SME') AS SME,
  11.          (SELECT     SUM(valor + sobrecargo)
  12.             WHERE      SERVICIO = 'SMR') AS SMR,
  13.          (SELECT     SUM(valor + sobrecargo)
  14.              WHERE      SERVICIO = 'TEL') AS TEL,
  15.          (SELECT     SUM(valor + sobrecargo)
  16.              WHERE      SERVICIO = 'TLL') AS TLL
  17. FROM          TRAFICO
  18. WHERE      (FACTURA = '16209216')
  19. GROUP BY FACTURA, MOVIL, SERVICIO
Me dice que sintaxsisincorrecta cerca de 'SERVICIO' y creo que es porq falta cerrar el primer (
pero si lo pongo el ) despues del ultimo where asi:

Código sql:
Ver original
  1. SELECT     FACTURA, MOVIL,
  2.     (SELECT     SUM(valor + sobrecargo),
  3.          (SELECT     SUM(valor + sobrecargo)
  4.              WHERE      SERVICIO = 'BAM') AS BAM,
  5.           (SELECT     SUM(valor + sobrecargo)
  6.              WHERE      SERVICIO = 'MMS') AS MMS,
  7.           (SELECT     SUM(valor + sobrecargo)
  8.               WHERE      SERVICIO = 'RPV') AS RPV,
  9.           (SELECT     SUM(valor + sobrecargo)
  10.              WHERE      SERVICIO = 'SME') AS SME,
  11.           (SELECT     SUM(valor + sobrecargo)
  12.              WHERE      SERVICIO = 'SMR') AS SMR,
  13.           (SELECT     SUM(valor + sobrecargo)
  14.               WHERE      SERVICIO = 'TEL') AS TEL,
  15.           (SELECT     SUM(valor + sobrecargo)
  16.               WHERE      SERVICIO = 'TLL') AS TLL) AS Expr1
  17. FROM         TRAFICO
  18. WHERE     (FACTURA = '16209216')
  19. GROUP BY FACTURA, MOVIL, SERVICIO

me dice solo una expresion puede ser especificada en la lista de select cuando sub consulta no esta introducida con EXISTS
la verda me tiene re colgado
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #17 (permalink)  
Antiguo 12/05/2009, 16:01
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por TonyChile Ver Mensaje
Mira si lo dejo asi


me dice solo una expresion puede ser especificada en la lista de select cuando sub consulta no esta introducida con EXISTS
la verda me tiene re colgado
Código sql:
Ver original
  1. SELECT     FACTURA, MOVIL,
  2.     (SELECT     SUM(valor + sobrecargo) FROM trafico WHERE factura = a.factura, movil = a.movil),
  3.          (SELECT     SUM(valor + sobrecargo) FROM trafico WHERE factura = a.factura, movil = a.movil AND
  4.             SERVICIO = 'BAM' AND ) AS BAM
  5. FROM         TRAFICO a
  6. WHERE     (FACTURA = '16209216')
  7. GROUP BY FACTURA, MOVIL

el servicio no lo estas usando como para hacer un group by de servicio, quita servicio.

nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #18 (permalink)  
Antiguo 13/05/2009, 08:08
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Ok ya saque el servicio y lo dejo asi:

Código sql:
Ver original
  1. SELECT     FACTURA, MOVIL,
  2.         (SELECT     SUM(valor + sobrecargo)
  3.          FROM          trafico
  4.          WHERE      factura = a.factura, movil = a.movil),
  5.          (SELECT     SUM(valor + sobrecargo)
  6.          FROM          trafico
  7.          WHERE      factura = a.factura, movil = a.movil AND SERVICIO = 'BAM' AND) AS BAM,
  8.          (SELECT     SUM(valor + sobrecargo)
  9.           FROM          trafico
  10.          WHERE      factura = a.factura, movil = a.movil AND SERVICIO = 'MMS' AND) AS MMS,
  11.          (SELECT     SUM(valor + sobrecargo)
  12.          FROM          trafico
  13.          WHERE      factura = a.factura, movil = a.movil AND SERVICIO = 'RPV' AND) AS RPV,
  14.          (SELECT     SUM(valor + sobrecargo)
  15.           FROM          trafico
  16.          WHERE      factura = a.factura, movil = a.movil AND SERVICIO = 'SME' AND) AS SME,
  17.          (SELECT     SUM(valor + sobrecargo)
  18.           FROM          trafico
  19.          WHERE      factura = a.factura, movil = a.movil AND SERVICIO = 'SMR' AND) AS SMR,
  20.          (SELECT     SUM(valor + sobrecargo)
  21.          FROM          trafico
  22.          WHERE      factura = a.factura, movil = a.movil AND SERVICIO = 'TEL' AND) AS TEL,
  23.          (SELECT     SUM(valor + sobrecargo)
  24.          FROM          trafico
  25.          WHERE      factura = a.factura, movil = a.movil AND SERVICIO = 'TLL' AND) AS TLL
  26. FROM         TRAFICO a
  27. WHERE     (FACTURA = '16209216')
  28. GROUP BY FACTURA, MOVIL

Pero me arroja un error dice: linea 1 sintaxsis incorrecta cerca de ','

mira saque:
SELECT FACTURA, MOVIL,
para ver si seguia el error y de todas formas me indicaba el mismo error sin esa sentencia y en la linea 1
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #19 (permalink)  
Antiguo 13/05/2009, 09:21
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

corregí esta parte


(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura and movil = a.movil),


para todos los casos..

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #20 (permalink)  
Antiguo 13/05/2009, 09:48
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Ok ya lo corregi quedo asi:

Código sql:
Ver original
  1. SELECT     FACTURA, MOVIL,
  2.    (SELECT     SUM(valor + sobrecargo)
  3.    FROM          trafico
  4.    WHERE      factura = a.factura AND movil = a.movil),
  5.    (SELECT     SUM(valor + sobrecargo)
  6.    FROM          trafico
  7.    WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'BAM' AND) AS BAM,
  8.    (SELECT     SUM(valor + sobrecargo)
  9.    FROM          trafico
  10.    WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'MMS' AND) AS MMS,
  11.    (SELECT     SUM(valor + sobrecargo)
  12.    FROM          trafico
  13.    WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'RPV' AND) AS RPV,
  14.    (SELECT     SUM(valor + sobrecargo)
  15.    FROM          trafico
  16.    WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'SME' AND) AS SME,
  17.    (SELECT     SUM(valor + sobrecargo)
  18.    FROM          trafico
  19.    WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'SMR' AND) AS SMR,
  20.    (SELECT     SUM(valor + sobrecargo)
  21.    FROM          trafico
  22.    WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'TEL' AND) AS TEL,
  23.    (SELECT     SUM(valor + sobrecargo)
  24.    FROM          trafico
  25.    WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'TLL' AND) AS TLL
  26. FROM         TRAFICO a
  27. WHERE     (FACTURA = '16209216')
  28. GROUP BY FACTURA, MOVIL

Pero me indica otro error dice:
Linea 1 :sintaxis incorrecta cerca de ')'

Y disculpa todas las preguntas GeoAvila sinceramente agradesco tu interes
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #21 (permalink)  
Antiguo 13/05/2009, 10:00
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

SELECT FACTURA, MOVIL,
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil),
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil AND SERVICIO = 'BAM' AND) AS BAM,
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil AND SERVICIO = 'MMS' AND) AS MMS,
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil AND SERVICIO = 'RPV' AND) AS RPV,
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil AND SERVICIO = 'SME' AND) AS SME,
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil AND SERVICIO = 'SMR' AND) AS SMR,
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil AND SERVICIO = 'TEL' AND) AS TEL,
(SELECT SUM(valor + sobrecargo)
FROM trafico
WHERE factura = a.factura AND movil = a.movil AND SERVICIO = 'TLL' AND) AS TLL
FROM TRAFICO a
WHERE (FACTURA = '16209216')
GROUP BY FACTURA, MOVIL

te señale esos "and" porque están demás depues de servicio = 'XX' no puede ir un And si no haces otra sentencia. quita los AND despues del servicio = 'XX'


nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #22 (permalink)  
Antiguo 13/05/2009, 10:24
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna (SOLUCION)

Te pasaste muchas gracias ya esta listo y solucionado.
Ahora sale tal y como lo necesito lo que biene sin datos lo arroja en null pero eso no es problema ya que eso lo modifico dentro del codigo facilmente

Publico el codigo de la SOLUCION:

Código sql:
Ver original
  1. SELECT     FACTURA, MOVIL,
  2.   (SELECT     SUM(valor + sobrecargo)
  3.   FROM          trafico
  4.   WHERE      factura = a.factura AND movil = a.movil) AS TOTAL,
  5.   (SELECT     SUM(valor + sobrecargo)
  6.   FROM          trafico
  7.   WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'BAM') AS BAM,
  8.   (SELECT     SUM(valor + sobrecargo)
  9.   FROM          trafico
  10.   WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'MMS') AS MMS,
  11.   (SELECT     SUM(valor + sobrecargo)
  12.   FROM          trafico
  13.   WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'RPV') AS RPV,
  14.   (SELECT     SUM(valor + sobrecargo)
  15.   FROM          trafico
  16.   WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'SME') AS SME,
  17.   (SELECT     SUM(valor + sobrecargo)
  18.   FROM          trafico
  19.   WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'SMR') AS SMR,
  20.   (SELECT     SUM(valor + sobrecargo)
  21.   FROM          trafico
  22.   WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'TEL') AS TEL,
  23.   (SELECT     SUM(valor + sobrecargo)
  24.   FROM          trafico
  25.   WHERE      factura = a.factura AND movil = a.movil AND SERVICIO = 'TLL') AS TLL
  26. FROM         TRAFICO a
  27. WHERE     (FACTURA = '16209216')
  28. GROUP BY FACTURA, MOVIL
  29. ORDER BY FACTURA, MOVIL

A coloco como sale para que les quede mas claro lo realizado

Código sql:
Ver original
  1. 16209216    77611111    29934           2816    5228    761 21129  
  2. 16209216    77622222    8036            3453            4583   
  3. 16209216    77633333    15007           1348            13659  
  4. 16209216    77644444    0                       0  
  5. 16209216    77655555    5728            1618    84      4026   
  6. 16209216    77666666    6095            370     0   5725

Te agradesco enormemete y sinceramente tu ayuda
Espero poder algun dia devolverte el favor ayudandote en algo
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #23 (permalink)  
Antiguo 13/05/2009, 10:30
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

en esta parte así sería el isnull, te devolvería un valor 0 para no se vea feo jeje.

Código sql:
Ver original
  1. Isnull((SELECT     SUM(valor + sobrecargo)
  2.   FROM          trafico
  3.   WHERE      factura = a.factura AND movil = a.movil),0) AS TOTAL


de nada y nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #24 (permalink)  
Antiguo 13/05/2009, 10:56
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por GeoAvila Ver Mensaje
en esta parte así sería el isnull, te devolvería un valor 0 para no se vea feo jeje.

Código sql:
Ver original
  1. Isnull((SELECT     SUM(valor + sobrecargo)
  2.   FROM          trafico
  3.   WHERE      factura = a.factura AND movil = a.movil),0) AS TOTAL


de nada y nos vemos..

Entonces queda asi


Código sql:
Ver original
  1. SELECT     FACTURA, MOVIL, ISNULL
  2.   ((SELECT     SUM(valor + sobrecargo)
  3.   FROM         trafico
  4.   WHERE     factura = a.factura AND movil = a.movil), 0) AS TOTAL, ISNULL
  5.    ((SELECT     SUM(valor + sobrecargo)
  6.    FROM         trafico
  7.    WHERE     factura = a.factura AND movil = a.movil AND SERVICIO = 'BAM'), 0) AS BAM, ISNULL
  8.    ((SELECT     SUM(valor + sobrecargo)
  9.    FROM         trafico
  10.   WHERE     factura = a.factura AND movil = a.movil AND SERVICIO = 'MMS'), 0) AS MMS, ISNULL
  11.   ((SELECT     SUM(valor + sobrecargo)
  12.    FROM         trafico
  13.    WHERE     factura = a.factura AND movil = a.movil AND SERVICIO = 'RPV'), 0) AS RPV, ISNULL
  14.    ((SELECT     SUM(valor + sobrecargo)
  15.    FROM         trafico
  16.     WHERE     factura = a.factura AND movil = a.movil AND SERVICIO = 'SME'), 0) AS SME, ISNULL
  17.     ((SELECT     SUM(valor + sobrecargo)
  18.     FROM         trafico
  19.     WHERE     factura = a.factura AND movil = a.movil AND SERVICIO = 'SMR'), 0) AS SMR, ISNULL
  20.     ((SELECT     SUM(valor + sobrecargo)
  21.      FROM         trafico
  22.     WHERE     factura = a.factura AND movil = a.movil AND SERVICIO = 'TEL'), 0) AS TEL, ISNULL
  23.     ((SELECT     SUM(valor + sobrecargo)
  24.      FROM         trafico
  25.      WHERE     factura = a.factura AND movil = a.movil AND SERVICIO = 'TLL'), 0) AS TLL
  26. FROM         TRAFICO a
  27. WHERE     (FACTURA = '16209216')
  28. GROUP BY FACTURA, MOVIL
  29. ORDER BY FACTURA, MOVIL

y el resultado asi:

Código sql:
Ver original
  1. 16209216    77611111    29934   0   0   2816    5228    761 21129   0
  2. 16209216    77622222    8036    0   0   3453    0   0   4583    0
  3. 16209216    77633333    15007   0   0   1348    0   0   13659   0
  4. 16209216    77644444    0   0   0   0   0   0   0   0
  5. 16209216    77655555    5728    0   0   1618    84  0   4026    0
  6. 16209216    77666666    6095    0   0   370 0   0   5725    0

Nada mas que decir te las mandaste GeoAvila

Por tu culpa me voy a tener que comprar un diccionario. Me has dejado sin palabras.
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
  #25 (permalink)  
Antiguo 13/05/2009, 11:00
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: Separar y sumar datos de una misma columna

Otra Forma de como Hacerlo
Código sql:
Ver original
  1. SELECT Factura,Movil,ISNULL([BAM],0) AS BAM,ISNULL([MMS],0) AS MMS,ISNULL([RPV],0) AS RPV,
  2.        ISNULL([SME],0) AS SME,ISNULL([SMR],0) AS SMR,ISNULL([TEL],0) AS TEL,
  3.        ISNULL([TLL],0) AS TLL,
  4.        ([BAM] + [MMS] + [RPV] + [SME] + [SMR] + [TEL] + [TLL]) AS TOTAL
  5. FROM
  6. (
  7.     SELECT Factura,Movil,Servicio FROM Trafico
  8. ) V PIVOT (SUM(VALOR + AGREGADO) FOR SERVICIO IN([BAM],[MMS],[RPV],[SME],[SMR],[TEL],[TLL])) AS PT
  9. ORDER BY FACTURA,MOVIL
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #26 (permalink)  
Antiguo 13/05/2009, 11:18
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 21 años
Puntos: 53
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por Dradi7 Ver Mensaje
Otra Forma de como Hacerlo
Código sql:
Ver original
  1. SELECT Factura,Movil,ISNULL([BAM],0) AS BAM,ISNULL([MMS],0) AS MMS,ISNULL([RPV],0) AS RPV,
  2.        ISNULL([SME],0) AS SME,ISNULL([SMR],0) AS SMR,ISNULL([TEL],0) AS TEL,
  3.        ISNULL([TLL],0) AS TLL,
  4.        ([BAM] + [MMS] + [RPV] + [SME] + [SMR] + [TEL] + [TLL]) AS TOTAL
  5. FROM
  6. (
  7.     SELECT Factura,Movil,Servicio FROM Trafico
  8. ) V PIVOT (SUM(VALOR + AGREGADO) FOR SERVICIO IN([BAM],[MMS],[RPV],[SME],[SMR],[TEL],[TLL])) AS PT
  9. ORDER BY FACTURA,MOVIL
esto solo funciona para sql 2005 y posterior aclarondo por si alguien prueba con una versión anterior no funcionará.

nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #27 (permalink)  
Antiguo 13/05/2009, 12:12
Avatar de TonyChile  
Fecha de Ingreso: marzo-2009
Ubicación: Maipú, Santiago
Mensajes: 422
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Separar y sumar datos de una misma columna

Cita:
Iniciado por Dradi7 Ver Mensaje
Otra Forma de como Hacerlo
Código sql:
Ver original
  1. SELECT Factura,Movil,ISNULL([BAM],0) AS BAM,ISNULL([MMS],0) AS MMS,ISNULL([RPV],0) AS RPV,
  2.        ISNULL([SME],0) AS SME,ISNULL([SMR],0) AS SMR,ISNULL([TEL],0) AS TEL,
  3.        ISNULL([TLL],0) AS TLL,
  4.        ([BAM] + [MMS] + [RPV] + [SME] + [SMR] + [TEL] + [TLL]) AS TOTAL
  5. FROM
  6. (
  7.     SELECT Factura,Movil,Servicio FROM Trafico
  8. ) V PIVOT (SUM(VALOR + AGREGADO) FOR SERVICIO IN([BAM],[MMS],[RPV],[SME],[SMR],[TEL],[TLL])) AS PT
  9. ORDER BY FACTURA,MOVIL
Buen aporte Gara (Hace ya un tiempo que no sales en la serie Shippuden) va me equivoque Dradi7
fuera de broma gracias por el aporte Dradi7 creo q a mas de uno le servira

y

Cita:
GeoAvila
esto solo funciona para sql 2005 y posterior aclarondo por si alguien prueba con una versión anterior no funcionará.
Muy buena aclaracion
Saludos a ambos
__________________
Chilenos 100% Chilenos de Corazón
"Nuestra mayor gloria no está en no caer jamás, sino en levantarnos cada vez que caigamos"
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:44.