Saltar al contenido

ADAPTAR SENTENCIA SQL para que funcione en Excel


Recommended Posts

Hola, tengo la siguiente tabla:

date employee motive text
01/01/2022 PETER B baja
01/01/2022 MARY R ruta
01/01/2022 ANN R ruta
02/01/2022 PETER B baja
02/01/2022 MARY R ruta
02/01/2022 ANN R ruta
03/01/2022 PETER B baja
03/01/2022 MARY R ruta
03/01/2022 ANN R ruta
04/01/2022 PETER R ruta
04/01/2022 MARY R ruta
04/01/2022 ANN R ruta
05/01/2022 PETER R ruta
05/01/2022 MARY R ruta
05/01/2022 ANN R ruta
06/01/2022 PETER B baja
06/01/2022 MARY R ruta
06/01/2022 ANN R ruta

 

Y necesito conseguir este output

employee start_date end_date
PETER 01/01/2022 03/01/2022
PETER 06/01/2022 06/01/2022

 

QUERY

select employee, min(date), max(date)
from (select t.*,
             lag(motive) over (partition by employee order by date) as prev_motive,
             lead(motive) over (partition by employee order by date) as next_motive,
             sum(case when motive = 'B' then 1 else 0 end) over (partition by employee order by date) as num_b
      from t
     ) t
where motive = 'B' and
      prev_motive <> 'B' and
      next_motive <> 'B'
group by employee, num_b;

 

Sabría alguien adaptarme esta query para que funcione en el editor de VBA. Gracias

Enlace a comentario
Compartir con otras webs

Hola

No se entiende bien lo que requieres ya que, si lo que vas a hacer es necesitar hacer una consulta hacia SQL Server desde el VBA de Excel, pues las cadenas de consulta se pasan como un string así que solo importa que las sentencias SQL de esa cadena las reconozca el sistema gestor de base de datos, ya que, si bien SQL es casi universal, hay pequeñas diferencias entre las bases de datos. Si en realidad te refieres a que esa consulta que muestras la usabas en SQL Server y ahora los datos los tienes en otro sistema gestor de base de datos o en Excel, pues será mejor que des los detalles.

Saludos.

Enlace a comentario
Compartir con otras webs

Si bien SQL es casi universal, pues ojo con ese "casi". SQL Server, al igual que otros sistemas gestores de bases de datos, tiene sentencias/instrucciones SQL propias y que no pueden usarse en otros SGBD y hay varias de esas en esa cadena que compartes ya que no hay forma de usarlas para Excel y no hay equivalente propios SQL de Excel como por ejemplo para el caso de Lag, Leed y un par más de ahí. Con las sentencias/instrucciones SQL que permite SQL, sinceramente no encuentro forma de hacerlo tal cual requieres, así a primera mano (y dando el tiempo que doy a los foros) me parece que tendrías que optar por hacerlo solo con VBA y es para darle varias vueltas en la cabeza.

Enlace a comentario
Compartir con otras webs

Si lo he hecho con VBA, es decir primero le paso una consulta sencilla y obtengo una tabla de valores ordenada y con los datos que busco, y a eso le paso formulas por el editor VBA ya que las bajas tienen carácter dinámico y no puedo predecir su dimensión, no se me ha ocurrido otra manera.

A: Leo de la tabla datos. Con conexión 

image.thumb.png.0385d6f773aa10b4b2b45393890933df.png

image.thumb.png.7a523fa4767475081f7fe2b1c15d86ab.png

B: Esto me arroja una tabla nueva en una hoja distinta.

image.thumb.png.47d3b46bd9c9bee6d4430cef8d2a8625.png

D.: Al estar ordenado puedo trabajar con fórmulas.  Que las paso a través del editor de VBA.

image.thumb.png.b4c708cb9419c53b5df1038a0bac83e5.png

Así me las he apañado, como he podido.

 

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.