** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Unir consultas
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoUnir consultas

 Responder Responder Página  <12
Autor
Mensaje
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 583
Enlace directo a este mensaje Enviado: 06/Agosto/2018 a las 18:08
Aparte que en la segunda línea de stSQL no indicas la tabla de origen de [Min9Horas], no veo nada raro. Supongo que te sigue dando el error en la cláusula From.

Puedes hacer una cosa: si las consultas, cuando las creaste en el diseñador funcionaban bien, puedes seguir trabajando ahí y ajustándolas. Si en el diseñador de consultas pulsas sobre el cuadro de una tabla, verás que en la hoja de propiedades aparece la propiedad Alias: ahí puedes establecer el alias para cada tabla. Y puedes usar la vista SQL para agregar la segunda consulta en la cláusula FROM, pasar luego a la vista Diseño y ver qué errores encuentra Access.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 06/Agosto/2018 a las 22:36
Publicado originalmente por pitxiku pitxiku escribió:

Aparte.......

Ya he calificado esos campos(Min9Horas) y sigue el error...ya lo mirare mas despacio....




De momento con la ayuda de Mihura voy asi y parece que funciona, ahora es ir poniendo el resto de campos y montando el resto de consultas, que son unas cuantas.  Ya ire contando.....

Me esta resultando bastante dificil entenderlas......


Dim SQL, SQL1 As String, SQL2 As String, SQL3 As String

    SQL1 = "SELECT DISTINCT Id, Parque" & _
        " FROM tbFicha" & _
        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]"
       
    SQL2 = "SELECT Parque, Categoria, Min9Horas, Min10Horas" & _
        " FROM (" & SQL1 & ") AS T1" & _
        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _
        " WHERE Categoria Like 'Cab*'"

    SQL3 = "SELECT Parque, Sum([9Horas]) AS S9,Sum([10Horas]) AS S10, Nz(Count([Observaciones]),0) AS OBS" & _
    " FROM (tbFicha" & _
    " LEFT JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles)" & _
    " LEFT JOIN tbDetallesFicha ON tbFichaTrabajador.id = tbDetallesFicha.Id_tbFichaTrabajador" & _
    " WHERE Categoria Like 'Cab*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha]" & _
    " GROUP BY Parque"

'Dos formas de poner la consulta
' - sin trocear las dos primeras

    SQL = "SELECT TT1.Parque, IIf(S9-Min9Horas=0, 'Ok', Nz(S9)-Nz(Min9Horas)) AS R9, IIf(S10-Min10Horas=0, 'Ok', Nz(S10)-Nz(Min10Horas)) AS R10, TT2.OBS" & _
        " FROM (SELECT Parque, Categoria, Min9Horas, Min10Horas" & _
        " FROM (SELECT DISTINCT Id, Parque" & _
        " FROM tbFicha" & _
        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]) AS T1" & _
        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _
        " WHERE Categoria Like 'Cab*') AS TT1" & _
        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _
        " ORDER BY TT1.Parque"

' - Y esta troceada
    SQL = "SELECT TT1.Parque, IIf(S9-Min9Horas=0, 'Ok', Nz(S9)-Nz(Min9Horas)) AS R9, IIf(S10-Min10Horas=0, 'Ok', Nz(S10)-Nz(Min10Horas)) AS R10, TT2.OBS" & _
        " FROM (" & SQL2 & ") AS TT1" & _
        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _
        " ORDER BY TT1.Parque"
   
    Me.RecordSource = SQL


Editado por rokoko - 06/Agosto/2018 a las 22:37
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 08/Agosto/2018 a las 09:43
Buenas!! Voy poco a poco, pero me he encontrado ahora con otro problemilla que no soy capaz de resolver, la consulta en si es casi la misma, solo que suma y resta dos criterios  Bom*  y Cab*
Las modificaciones que hago son estas, respecto a la que estan en el post de arriba, le añado el filtro Bom*  y sumo los campos Min9Horas y Min10Horas

SQL3 = "SELECT Parque, Sum([9Horas]) AS S9,Sum([10Horas]) AS S10, Nz(Count([Observaciones]),0) AS OBS" & _
    " FROM (tbFicha" & _
    " LEFT JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles)" & _
    " LEFT JOIN tbDetallesFicha ON tbFichaTrabajador.id = tbDetallesFicha.Id_tbFichaTrabajador" & _
    " WHERE Categoria Like 'Cab*'  OR Categoria Like 'Bom*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha]" & _
    " GROUP BY Parque"


SQL = "SELECT TT1.Parque, IIf(S9-Sum(Min9Horas)=0, 'Ok', Nz(S9)-Nz(Sum(Min9Horas))) AS R9, IIf(S10-Sum(Min10Horas)=0, 'Ok', Nz(S10)-Nz(Sum(Min10Horas))) AS R10, TT2.OBS" & _
        " FROM (SELECT Parque, Categoria, Min9Horas, Min10Horas" & _
        " FROM (SELECT DISTINCT Id, Parque" & _
        " FROM tbFicha" & _
        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]) AS T1" & _
        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _
        " WHERE Categoria Like 'Cab*')  OR Categoria Like 'Bom*' AS TT1" & _
        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _
        " ORDER BY TT1.Parque"



El error que me suelta es se a producido el error 3122  su consulta no incluye la expresion especifica 'Parque'  como parte de una funcion de agregado

No consigo ver en que fallo.....

Saludos
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 583
Enlace directo a este mensaje Enviado: 08/Agosto/2018 a las 17:57
Para SQL, la segunda, en el WHERE de la categoría, tienes que cerrar el paréntesis después del Bom y antes del Alias:

" WHERE Categoria Like 'Cab*'  OR Categoria Like 'Bom*') AS TT1" & _

Otras cosas:

- Ten cuidado con las fechas y los formatos americano <-> español. Suelen dar dolores de cabeza.
- Haces 2 veces la suma de los campos: una para decir si está bien, y otra para ver el resultado. ¿No puede ser sólo una suma?


Editado por pitxiku - 08/Agosto/2018 a las 17:59
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 08/Agosto/2018 a las 20:01
El parentesis lo tenia bien, se me a ido el dedo al hacer un corta y pega, cuando utilizo una sola categoria unicamente en el  WHERE Categoria Like 'Cab*')  AS TT1  por ejemplo,  no hago la suma del campo Min9Horas y funciona correctamente, pero cuando utilizo las dos categorias si que tengo que sumar Min9Horas, hay me salta el error...    no se si te valdra de pista.....



Lo de poner 2 veces la resta es por el IIF, si la resta da 0 pones OK si no pones lo que de las resta.....te refieres a eso?  o a la  sql3??  hay suma horas diferentes.....


SQL3 = "SELECT Parque, HoraFirmas, FirmasOk, Sum([9Horas]) AS S9,Sum([10Horas]) AS S10, Nz(Count([Observaciones]),0) AS OBS" & _
    " FROM (tbFicha" & _
    " LEFT JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles)" & _
    " LEFT JOIN tbDetallesFicha ON tbFichaTrabajador.id = tbDetallesFicha.Id_tbFichaTrabajador" & _
    " WHERE Categoria Like 'Cab*' OR Categoria Like 'Bom*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha]" & _
    " GROUP BY Parque, HoraFirmas, FirmasOK"



    SQL = "SELECT TT1.Parque, TT2.HoraFirmas, TT2.FirmasOK, IIf(S9-Sum(Min9Horas)=0, 'Ok', Nz(S9)-Nz(Sum(Min9Horas))) AS R9, IIf(S10-Sum(Min10Horas)=0, 'Ok', Nz(S10)-Nz(Sum(Min10Horas))) AS R10, TT2.OBS" & _
        " FROM (SELECT Parque, Categoria, Min9Horas, Min10Horas" & _
        " FROM (SELECT DISTINCT Id, Parque,HoraFirmas, FirmasOK" & _
        " FROM tbFicha" & _
        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]) AS T1" & _
        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _
        " WHERE Categoria Like 'Cab*' OR Categoria Like 'Bom*') AS TT1" & _
        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _
        " ORDER BY TT1.Parque"
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 08/Agosto/2018 a las 20:30
Creo que el fallo puede ser que falte el GROUP BY  en la SQL

Lo pongo asi y ahora el error es otro, aunque pruebo en poner los IIf(S9-Sum(Min9Horas)=0....... de varias formas en GROUP BY  no lo consigo
Error 3122 Su consulta no incluye la expresion especificada IIf(S9-Sum(Min9Horas)=0............como parte de una funcion de agregado

SQL = "SELECT TT1.Parque, TT2.HoraFirmas, TT2.FirmasOK, TT2.OBS, IIf(S9-Sum(Min9Horas)=0, 'Ok', Nz(S9)-Nz(Sum(Min9Horas))) AS R9, IIf(S10-Sum(Min10Horas)=0, 'Ok', Nz(S10)-Nz(Sum(Min10Horas))) AS R10" & _
        " FROM (SELECT Parque, Categoria, Min9Horas, Min10Horas" & _
        " FROM (SELECT DISTINCT Id, Parque,HoraFirmas, FirmasOK" & _
        " FROM tbFicha" & _
        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]) AS T1" & _
        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _
        " WHERE Categoria Like 'Cab*' OR Categoria Like 'Bom*') AS TT1" & _
        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _
        " GROUP BY TT1.Parque, TT2.HoraFirmas, TT2.FirmasOK, TT2.OBS" & _
        " ORDER BY TT1.Parque"


Editado por rokoko - 08/Agosto/2018 a las 20:31
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 583
Enlace directo a este mensaje Enviado: 09/Agosto/2018 a las 17:26
Me refiero a que no necesitas hacer la suma 2 veces: 1 para que el Iif sepa cuál de los 2 argumentos tomar, y otra para el resultado que hay que poner en el argumento.

Por otro lado, el propio Access ya ye está diciendo que lo que no sea una suma, conteo, etc., en una consulta de totales, debe ir a la agrupación.

Prueba a colocar las sumas en una serie de campos:

Sum(Min9Horas) AS Suma9Horas, Sum(Min10Horas) AS Suma10Horas

Y luego usa esas sumas en otros campos:

Iif(Nz(S9)-Nz(Suma0Horas)=0, 'OK', Nz(S9)-Nz(Suma9Horas)) AS R9, …

Si así tampoco te deja, tendrás que hacer otro nivel de consultas: una para la consulta de totales, y otra encima para los Iif.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 10/Agosto/2018 a las 17:44
Que pelea estoy teniendo con esta consulta, en principio es la ultima que me queda, las demas ya me han ido saliendo, pero esta no hay forma....

SQL3 = "SELECT Parque, HoraFirmas, FirmasOk, Nz(Count([Observaciones]),0) AS OBS, Sum([9Horas]) AS S9" & _
    " FROM (tbFicha" & _
    " LEFT JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles)" & _
    " LEFT JOIN tbDetallesFicha ON tbFichaTrabajador.id = tbDetallesFicha.Id_tbFichaTrabajador" & _
    " WHERE Categoria Like 'Cab*' OR Categoria Like 'Bom*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha]" & _
    " GROUP BY Parque, HoraFirmas, FirmasOK"

'Dos formas de poner la consulta
' - sin trocear las dos primeras
    SQL = "SELECT TT1.Parque, TT2.HoraFirmas, TT2.FirmasOK, TT2.OBS, Sum(Min9Horas) AS Suma9Horas,IIf(Nz(S9)-Nz(Suma9Horas)=0, 'OK', Nz(S9)-Nz(Suma9Horas)) AS R9" & _
        " FROM (SELECT Parque, Categoria, Min9Horas" & _
        " FROM (SELECT DISTINCT Id, Parque,HoraFirmas, FirmasOK" & _
        " FROM tbFicha" & _
        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]) AS T1" & _
        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _
        " WHERE Categoria Like 'Cab*' OR Categoria Like 'Bom*') AS TT1" & _
        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _
        " GROUP BY TT1.Parque, TT2.HoraFirmas, TT2.FirmasOK, TT2.OBS" & _
        " ORDER BY TT1.Parque" 



El error sigue el mismo....me tiene despistado del todo. En verde la ultima modificacion.
https://www.dropbox.com/s/92htqhocnrv0rtc/Error%20access.JPG?dl=0







Esta consulta de abajo funciona perfectamente, solo lleva 1 categoria (Cab*) como filtro y Min9Horas no va sumada, yo tengo que poner las dos categorias como filtro en where y sumar Min9Horas

La 1º letra azul hay que sumarla y la 2º letra azul  y la roja va con este otro filtro Categoria Like 'Cab*'
Le voy poniendo las agrupaciones hasta que me salta el error en el cual me atasco..

SQL3 = "SELECT Parque, Nz(Count([Observaciones]),0) AS OBS, Sum([9Horas]) AS S9”& _

    " FROM (tbFicha" & _

    " LEFT JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles)" & _

    " LEFT JOIN tbDetallesFicha ON tbFichaTrabajador.id = tbDetallesFicha.Id_tbFichaTrabajador" & _

    " WHERE Categoria Like 'Cab*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha]" & _

    " GROUP BY Parque"

 


    SQL = "SELECT TT1.Parque, TT2.OBS, IIf(S9-Min9Horas=0, 'Ok', Nz(S9)-Nz(Min9Horas)) AS R9 " & _

        " FROM (SELECT Parque, Categoria, Min9Horas" & _

        " FROM (SELECT DISTINCT Id, Parque" & _

        " FROM tbFicha" & _

        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]) AS T1" & _

        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _

        " WHERE Categoria Like 'Cab*') AS TT1" & _

        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _

        " ORDER BY TT1.Parque"



Saludos


Editado por rokoko - 10/Agosto/2018 a las 17:47
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 10283
Enlace directo a este mensaje Enviado: 10/Agosto/2018 a las 18:55
Deberías coger solo los datps necesarios en la consulta y las operaciones con los mismos hacerlas en el formulario.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 10/Agosto/2018 a las 20:20
Ya habia pensado eso Mihura, pero son mucho campos y no me convencia..

Pero...no me lo creo ni yo...parece que esta funcionaTongueTongueTongueTongue

Hare mas pruebas, pero parece que pinta bien, no veas que ilusion me ha hecho.


   'H  Horas trabajadas(tbDetallesFicha)  sumadas
   'M  Horas de minimos (tbFichaMinimos)  sumadas
   'R  Resultado de restar H-M
   

    
    'Suma de las horas trabajadas en 2 categorias

    SQL3 = "SELECT Parque, Nz(Count([Observaciones]),0) AS OBS, Nz(Sum([9Horas]),0) AS H9" & _
    " FROM (tbFicha" & _
    " LEFT JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles)" & _
    " LEFT JOIN tbDetallesFicha ON tbFichaTrabajador.id = tbDetallesFicha.Id_tbFichaTrabajador" & _
    " WHERE Categoria Like 'Cab*' Or Categoria Like 'Bom*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha]" & _
    " GROUP BY Parque"


          'Suma de los minimos de 2 categorias
    SQL = "SELECT TT1.Parque, TT2.OBS, Sum([Min9Horas]) AS M9, H9, IIf(H9-M9=0,'OK',H9-M9) As R9" & _
        " FROM (SELECT Parque, Categoria, Min9Horas" & _
        " FROM (SELECT DISTINCT Id, Parque" & _
        " FROM tbFicha" & _
        " WHERE Fecha = [Formularios]![frmGestionOficial]![txtFecha]) AS T1" & _
        " LEFT JOIN tbFichaMinimos ON T1.id = tbFichaMinimos.IdFicha" & _
        " WHERE Categoria Like 'Cab*' Or Categoria Like 'Bom*') AS TT1" & _
        " LEFT JOIN (" & SQL3 & ") AS TT2 ON TT1.Parque = TT2.Parque" & _
        " GROUP BY TT1.Parque,TT2.OBS, H9" & _
        " ORDER BY TT1.Parque"
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 11/Agosto/2018 a las 13:47
A la SQL3 le he tenido que poner el filtro WHERE como lo veis en negrita, si no no me filtraba los dias en las dos categorias......Le hare una prueba a fondo a ver que tal.....

SQL3 = "SELECT Parque, Nz(Count([Observaciones]),0) AS OBS, Nz(Sum([9Horas]),0) AS H9" & _
    " FROM (tbFicha" & _
    " LEFT JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles)" & _
    " LEFT JOIN tbDetallesFicha ON tbFichaTrabajador.id = tbDetallesFicha.Id_tbFichaTrabajador" & _
    " WHERE (Categoria Like 'Cab*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha]) OR (Categoria Like 'Bom*' AND Fecha = [Formularios]![frmGestionOficial]![txtFecha])" & _
    " GROUP BY Parque"


        
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1403
Enlace directo a este mensaje Enviado: 22/Agosto/2018 a las 18:47
Buenas!!

Ya me van saliendo las consultas en sql con subconsultas, por mi parte se puede cerrar.

Muchas gracias a todos

Saludos
Arriba
 Responder Responder Página  <12
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable