Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2018
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Question Unir dos consultas SQL

Un saludo para todos. Necesito un poco de ayuda con el siguiente problema:
Tengo las siguientes consultas las cuales funcionan correctamente.


Código SQL [-]
SELECT Sum(Importe) AS Importe_Total_CUP
  FROM Facturas as f_CUP
  WHERE (f_CUP.Tipo_de_Moneda='CUP')
Código SQL [-]
SELECT Sum(Importe) AS Importe_Total_CUC
  FROM Facturas as f_CUC
  WHERE (f_CUC.Tipo_de_Moneda='CUC')

El problema es que para ejecutarlas utilizo dos ADOQuery, con todo lo que conlleva (más recursos).
¿Exitiría la posibilidad de ejecutar las dos consulta en una?
Encontré en la red algo como esto, lo cambié y no funciona.
Código SQL [-]
SELECT
         SUM(CASE WHEN Tipo_de_Moneda = 'CUP' THEN Importe ELSE 0 END) total_cup ,
         SUM(CASE WHEN Tipo_de_Moneda = 'CUC' THEN Importe ELSE 0 END) total_CUC,
  FROM Facturas
Si alguien sabe cómo solucionar esto…
Uso XE8
Responder Con Cita
  #2  
Antiguo 03-10-2018
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Código SQL [-]
SELECT
         SUM(CASE WHEN Tipo_de_Moneda = 'CUP' THEN Importe ELSE 0 END) total_cup ,
         SUM(CASE WHEN Tipo_de_Moneda = 'CUC' THEN Importe ELSE 0 END) total_CUC,
  FROM Facturas

Esto se ve correcto, debería funcionar.

Cuando dices que no funciona a que te refieres?, Algún mensaje de error?, no da la respuesta esperada?.

A propósito, ¿Que motor de Bases de Datos estás utilizando?
Responder Con Cita
  #3  
Antiguo 03-10-2018
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Cuando la ejecuto me dice que la palabra clabe WHEN no es reconocida.
Estoy utilizando ACCESS
Responder Con Cita
  #4  
Antiguo 04-10-2018
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por Yulexis Ver Mensaje
Cuando la ejecuto me dice que la palabra clabe WHEN no es reconocida.
Estoy utilizando ACCESS
Access es un motor rdbms muy pobre, asi que no soporta esa forma de hacerlo. La unica es que hagas un UNION ALL:

Código SQL [-]
SELECT ...
  FROM Facturas as f_CUP
  WHERE (f_CUP.Tipo_de_Moneda='CUP')
UNION ALL
SELECT ...
  FROM Facturas as f_CUP

o con un case dentro del SUM
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 04-10-2018
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Les explico mejor.

Tengo la siguiente tabla en ACCESS:

Fecha | Importe | Entidad | Estado | Tipo_de_Moneda
1/2/2018 14.5 Cualquiera pagada CUC
2/2/2018 6.30 Otra pagada CUP
3/2/2018 8 Otra pagada CUC
4/2/2018 4 Otra pagada CUP

Lo que necesito es en una consulta obtener los siguientes datos:
Importe_CUP = 10.3
Importe_CUC = 22.5

Ya he intentado de todo pero nada.
Con las consultas del inicio funciona pero solo con un ADOQuery para cada una.
Responder Con Cita
  #6  
Antiguo 04-10-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si utilizas un ADOQuery con la siguiente SQL deberían salir los datos que necesitas:

Código SQL [-]
Select TipoMoneda, SUM(Importe) from Tabla4 GROUP bY TipoMoneda


Código:
TipoMoneda   Importe
-----------------------
CUC              22,50
CUP              10,30
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 04-10-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Aunque no es lo que necesitas exactamente sí contesta a una cuestión que has planteado al principio.
Utilizando un único TADOquery SI hay la posibilidad de ejecutar varias consultas independientes y acceder a los resultados.

Es decir, podemos añadir a la propiedad SQL algo como esto:

Código SQL [-]
select * from TABLA1;
select * from TABLA2;
select * from TABLA3;

Y podemos recuperar los Datos en tres Recordset diferentes.

Si utilizamos en siguiente código:

Código Delphi [-]
var
  rs:_Recordset;
  i:OleVariant;
begin
  query.Close;
  query.Open;

  rs := query.Recordset;
  Memo1.Lines.Add('--------------------------');
  while Assigned(rs) do begin
    while (not rs.EOF) do begin
      Memo1.Lines.Add(rs.Fields[0].Value);
      rs.MoveNext;
    end;
    rs := query.Recordset.NextRecordset(i);
    Memo1.Lines.Add('--------------------------');
  end;

Podemos obtener todos los recordset de la query (las 3 tablas) y todos los registros de cada recordset (tabla)
Y el resultado en pantalla sería algo así:


Código:
--------------------------
Campo1 AAAAAA Tabla1
Campo1 BBBBBB Tabla1
--------------------------
Campo1 CCCCCC Tabla2     
Campo1 DDDDDD Tabla2
--------------------------
Campo1 EEEEEE Tabla3     
Campo1 FFFFFF Tabla3
--------------------------
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 04-10-2018
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Thumbs up [Resuelto]

Gracias mamcx y Neftali(La segunda ves que me ayudas hermano)


Resolví el problema con la siguiente SQL la cual armé luego de leer de que dentro de una llamada SQL se puede implementar un If...Then:


Código SQL [-]
SELECT
    Sum(iif(fact.Tipo_de_Moneda='CUP',fact.Importe, 0)) AS Importe_Total_CUP,
    Sum(iif(fact.Tipo_de_Moneda='CUC',fact.Importe, 0)) AS Importe_Total_CUC,
    Sum(iif(fact.Tipo_de_Moneda='CUP' AND fact.Estado='Facturada',fact.Importe, 0)) AS Importe_Sin_Pagar_CUP,
    Sum(iif(fact.Tipo_de_Moneda='CUC' AND fact.Estado='Facturada',fact.Importe, 0)) AS Importe_Sin_Pagar_CUC,
    Sum(iif(fact.Tipo_de_Moneda='CUP' AND fact.Estado='Pagada',fact.Importe, 0)) AS Importe_Pagado_CUP,
    Sum(iif(fact.Tipo_de_Moneda='CUC' AND fact.Estado='Pagada',fact.Importe, 0)) AS Importe_Pagado_CUC
FROM Facturas as fact

Esto me funciona perfectamente, se vinculan cada uno de los campos de la consulta con sus respectivas Label y listo (los muestro pero puedo hacer cualquier cosa con ellos).



Espero me den su opinión de si es o no una forma eficiente de realizarlo. Cómo será el consumo de recurso cuando tenga una gran cantidad de registros?
Responder Con Cita
  #9  
Antiguo 04-10-2018
Yulexis Yulexis is offline
Miembro
 
Registrado: sep 2016
Posts: 19
Poder: 0
Yulexis Va por buen camino
Así me ha quedado. En colores los datos que obtengo con la SQL.
Imágenes Adjuntas
Tipo de Archivo: jpg facturas.jpg (35,1 KB, 15 visitas)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Unir los campos de dos consultas Choclito SQL 0 17-05-2013 23:40:47
Como unir dos consultas en acces Pachlu SQL 6 17-06-2011 17:11:40
Unir dos consultas SQL carloskock SQL 1 26-10-2008 09:54:58
Unir 2 Consultas en una sola hmoner SQL 12 24-05-2006 07:20:42
unir 2 consultas con campos diferentes.. sakuragi SQL 7 03-10-2005 11:12:28


La franja horaria es GMT +2. Ahora son las 17:39:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi