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

Consulta a BBDD con campo calculado

Estas en el tema de Consulta a BBDD con campo calculado en el foro de SQL Server en Foros del Web. Buenas, me he currado una pedazo de consulta, y me he quedado a un paso del final. Digamos que tengo una consulta A que me ...
  #1 (permalink)  
Antiguo 15/10/2014, 02:19
 
Fecha de Ingreso: noviembre-2003
Mensajes: 456
Antigüedad: 20 años, 5 meses
Puntos: 1
Pregunta Consulta a BBDD con campo calculado

Buenas,

me he currado una pedazo de consulta, y me he quedado a un paso del final.

Digamos que tengo una consulta A que me devuelve esto:

Nombre; Cantidad
Pepe; 100€
Juan; 150€

Quiero hacer una consulta para que me añada un campo adicional como suma de las dos cantidades, de manera que quede así:

Nombre; Cantidad; Suma
Pepe; 100€; 250€
Juan; 150€; 250€

He probado con

Código:
select SubQuery1.Nombre, SubQuery1.Cantidad, SUM(SubQuery1.Cantidad) as Suma FROM
(
...
)
SubQuery1
Pero no me las suma (ni me da error).

¿Alguna idea?

Gracias!
  #2 (permalink)  
Antiguo 15/10/2014, 06:51
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: Consulta a BBDD con campo calculado

podrias poner tu query completo???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 15/10/2014, 07:12
 
Fecha de Ingreso: noviembre-2003
Mensajes: 456
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Consulta a BBDD con campo calculado

Buenas, compañero. La query que me funciona es ésta:

Código SQL:
Ver original
  1. SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta FROM
  2.                     (
  3.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  4.                     FROM AVISOS INNER JOIN INTERV
  5.                     ON AVISOS.TIPOINTERV=INTERV.ID
  6.                     INNER JOIN FPRIOR
  7.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  8.                     WHERE AVISOS.CONTRATO=11
  9.                     AND AVISOS.ESTADO02=0
  10.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  11.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  12.                     )
  13.                     SubQuery3
  14.                 GROUP BY SubQuery3.TIPO_INC
[/code]

No te pierdas con los JOIN. Son 4 tablas, pero al final lo que me devuelve son 2 campos. Uno de tipo texto (DISTINCT), y el número de veces que se repite dicho string.

Lo que me interesa es añadir un campo más que me sume todas las concurrencias de todos los strings (o la suma de los valores del campo numérico CUENTA".

Muchas gracias!

Última edición por gnzsoloyo; 15/10/2014 a las 07:41
  #4 (permalink)  
Antiguo 15/10/2014, 07:27
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: Consulta a BBDD con campo calculado

Código SQL:
Ver original
  1. SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta INTO #temp FROM
  2.                     (
  3.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  4.                     FROM AVISOS INNER JOIN INTERV
  5.                     ON AVISOS.TIPOINTERV=INTERV.ID
  6.                     INNER JOIN FPRIOR
  7.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  8.                     WHERE AVISOS.CONTRATO=11
  9.                     AND AVISOS.ESTADO02=0
  10.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  11.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  12.                     )
  13.                     SubQuery3
  14.                 GROUP BY SubQuery3.TIPO_INC
  15.  
  16.  
  17. SELECT t1.TIPO_INC,t2.total FROM #temp AS t1,(
  18. SELECT SUM(cuenta) AS total FROM #temp) AS t2

Prueba con esto :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 15/10/2014, 08:02
 
Fecha de Ingreso: noviembre-2003
Mensajes: 456
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Consulta a BBDD con campo calculado

No me funciona. Me devuelve sólo dos columnas: El texto y la suma total (igual para cada registro).

De todas formas, ¿hace falta usar una tabla intermedia? :(

Muchas gracias!
  #6 (permalink)  
Antiguo 15/10/2014, 08:49
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: Consulta a BBDD con campo calculado

Cita:
Iniciado por banderas20 Ver Mensaje
No me funciona. Me devuelve sólo dos columnas: El texto y la suma total (igual para cada registro).

De todas formas, ¿hace falta usar una tabla intermedia? :(

Muchas gracias!
Pues que no querias eso???

Nombre; Cantidad; Suma
Pepe; 100€; 250€
Juan; 150€; 250€

El texto y la suma para las 2 cantidades?? la tabla intermedia es para evitar el tener que poner todo tu query en el subquery que estoy haciendo.......porque quedaria

Código SQL:
Ver original
  1. SELECT t1.TIPO_INC FROM (SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta INTO #temp FROM
  2.                     (
  3.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  4.                     FROM AVISOS INNER JOIN INTERV
  5.                     ON AVISOS.TIPOINTERV=INTERV.ID
  6.                     INNER JOIN FPRIOR
  7.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  8.                     WHERE AVISOS.CONTRATO=11
  9.                     AND AVISOS.ESTADO02=0
  10.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  11.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  12.                     )
  13.                     SubQuery3
  14.                 GROUP BY SubQuery3.TIPO_INC) AS t1,(
  15. SELECT SUM(cuenta) AS total FROM (SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta INTO #temp FROM
  16.                     (
  17.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  18.                     FROM AVISOS INNER JOIN INTERV
  19.                     ON AVISOS.TIPOINTERV=INTERV.ID
  20.                     INNER JOIN FPRIOR
  21.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  22.                     WHERE AVISOS.CONTRATO=11
  23.                     AND AVISOS.ESTADO02=0
  24.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  25.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  26.                     )
  27.                     SubQuery3
  28.                 GROUP BY SubQuery3.TIPO_INC)) AS t2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 15/10/2014, 08:59
 
Fecha de Ingreso: noviembre-2003
Mensajes: 456
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Consulta a BBDD con campo calculado

Cita:
Iniciado por Libras Ver Mensaje
Pues que no querias eso???

Nombre; Cantidad; Suma
Pepe; 100€; 250€
Juan; 150€; 250€

El texto y la suma para las 2 cantidades?? la tabla intermedia es para evitar el tener que poner todo tu query en el subquery que estoy haciendo.......porque quedaria

......
Hola Libras,

necesito 3 columnas. Texto, cantidad y suma (aunque esta última sea igual para todos). La consulta que me has pasado devuelve sólo 2 campos.

Si no hay otra manera más limpia de hacerlo, me quedo con la de la tabla intermedia.

Muchas gracias por tu apoyo!
  #8 (permalink)  
Antiguo 15/10/2014, 09:12
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: Consulta a BBDD con campo calculado

Código SQL:
Ver original
  1. SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta INTO #temp FROM
  2.                     (
  3.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  4.                     FROM AVISOS INNER JOIN INTERV
  5.                     ON AVISOS.TIPOINTERV=INTERV.ID
  6.                     INNER JOIN FPRIOR
  7.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  8.                     WHERE AVISOS.CONTRATO=11
  9.                     AND AVISOS.ESTADO02=0
  10.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  11.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  12.                     )
  13.                     SubQuery3
  14.                 GROUP BY SubQuery3.TIPO_INC
  15.  
  16.  
  17. SELECT t1.TIPO_INC,t1.cuenta,t2.total FROM #temp AS t1,(
  18. SELECT SUM(cuenta) AS total FROM #temp) AS t2

En lugar de una temporal podrias usar una CTE que seria algo como esto:

Código SQL:
Ver original
  1. -- Define the CTE expression name and column list.
  2. WITH query_cte (tipo_inc,cuenta)
  3. AS
  4. -- Define the CTE query.
  5. (
  6. SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta INTO #temp FROM
  7.                     (
  8.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  9.                     FROM AVISOS INNER JOIN INTERV
  10.                     ON AVISOS.TIPOINTERV=INTERV.ID
  11.                     INNER JOIN FPRIOR
  12.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  13.                     WHERE AVISOS.CONTRATO=11
  14.                     AND AVISOS.ESTADO02=0
  15.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  16.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  17.                     )
  18.                     SubQuery3
  19.                 GROUP BY SubQuery3.TIPO_INC
  20.  )
  21. -- Define the outer query referencing the CTE name.
  22. SELECT t1.TIPO_INC,t1.cuenta,t2.total FROM query_cte  AS t1,(
  23. SELECT SUM(cuenta) AS total FROM query_cte ) AS t2


Aclarando las CTE's solo son validas en sql server 2008 y posteriores
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 15/10/2014 a las 09:18
  #9 (permalink)  
Antiguo 16/10/2014, 00:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 456
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Consulta a BBDD con campo calculado

Me lanza esto:

Sintaxis incorrecta cerca de la palabra clave 'INTO'

en la línea
Código:
SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta INTO #temp FROM
Sintaxis incorrecta cerca de 'SubQuery3'.

en la línea
Código:
SubQuery3
                GROUP BY SubQuery3.TIPO_INC
Gracias!!!
  #10 (permalink)  
Antiguo 16/10/2014, 06:58
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: Consulta a BBDD con campo calculado

Código SQL:
Ver original
  1. SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta INTO #temp FROM
  2.                     (
  3.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  4.                     FROM AVISOS INNER JOIN INTERV
  5.                     ON AVISOS.TIPOINTERV=INTERV.ID
  6.                     INNER JOIN FPRIOR
  7.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  8.                     WHERE AVISOS.CONTRATO=11
  9.                     AND AVISOS.ESTADO02=0
  10.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  11.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  12.                     )
  13.                     AS SubQuery3  GROUP BY SubQuery3.TIPO_INC
  14.  
  15. SELECT t1.TIPO_INC,t1.cuenta,t2.total FROM #temp AS t1,(
  16. SELECT SUM(cuenta) AS total FROM #temp) AS t2
  17.  
  18.  
  19. -- Define the CTE expression name and column list.
  20. WITH query_cte (tipo_inc,cuenta)
  21. AS
  22. -- Define the CTE query.
  23. (
  24. SELECT DISTINCT SubQuery3.TIPO_INC, COUNT(SubQuery3.TIPO_INC) AS Cuenta FROM
  25.                     (
  26.                     SELECT AVISOS.NUMERO, AVISOS.DNI, AVISOS.DESCRIP, DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) AS T_AVISO, INTERV.TEXTO AS TIPO_INC, FPRIOR.TEXTO AS PRIORIDAD
  27.                     FROM AVISOS INNER JOIN INTERV
  28.                     ON AVISOS.TIPOINTERV=INTERV.ID
  29.                     INNER JOIN FPRIOR
  30.                     ON AVISOS.PRIORIDAD=FPRIOR.ID
  31.                     WHERE AVISOS.CONTRATO=11
  32.                     AND AVISOS.ESTADO02=0
  33.                     AND AVISOS.PRIORIDAD IN (67108869,67108870,67108873)
  34.                     AND DATEADD (MINUTE,MINUTOS,CONVERT(datetime, FECHA, 120)) BETWEEN CONVERT(datetime, '2014-09-01 00:00:00',120) AND CONVERT(datetime, '2014-09-30 23:59:00',120)
  35.                     )
  36.                     SubQuery3
  37.                 GROUP BY SubQuery3.TIPO_INC
  38.  )
  39. -- Define the outer query referencing the CTE name.
  40. SELECT t1.TIPO_INC,t1.cuenta,t2.total FROM query_cte  AS t1,(
  41. SELECT SUM(cuenta) AS total FROM query_cte ) AS t2

y ya buscaste cual es el error??? creo que no, esperas que la respuesta caiga del foro.........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 20/10/2014, 05:11
 
Fecha de Ingreso: noviembre-2003
Mensajes: 456
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Consulta a BBDD con campo calculado

Hola Libras.

Sí, he buscado el error y no he encontrado nada. Y evidentemente que espero que la respuesta caiga del foro, si no, no habría empezado a postear en él.

Gracias por tu ayuda!

Etiquetas: bbdd, campo, query, select
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 20:29.