SQL - unir consulta y que tenga una sola "variable"

 
Vista:
sin imagen de perfil

unir consulta y que tenga una sola "variable"

Publicado por Neil (2 intervenciones) el 17/04/2024 19:59:04
buen dia estimados
me podrian ayudar con lo siguiente:

tengo tres consultas que estoy uniendo y cada consulta tiene una variable que debo de cambiar que es:
B.NUMERO_NOMINA>=141 AND B.NUMERO_NOMINA<=142

quisiera tener la forma de poner una sola vez y que afecte a las tres consultas, ¿será posible esto?

aqui mi query


(SELECT 'INGRESOS' AS MOTIVO, B.NUMERO_NOMINA, A.CENTRO_COSTO,
SUM(B.TOTAL) MONTO
FROM
LUKOLL.EMPLEADO A INNER JOIN LUKOLL.EMPLEADO_CONC_NOMI B ON A.EMPLEADO=B.EMPLEADO
WHERE
CONCEPTO IN ('IAES','IAFA','IAFL','IAMA','IBER','IBEX','IBON','ICAN','ICOM','ICTM','IDIE','IGRA','IGRE','IGRM','IHEA','IHEB','IHEC','IINC','IMOV','IOIN','IOIR','IPAL','IPRE','ISUB','ISUE','ISUM','IUTI','IVAC','IVAV')
--AND A.ACTIVO='S'
AND
B.NUMERO_NOMINA>=141
AND B.NUMERO_NOMINA<=142
GROUP BY B.NUMERO_NOMINA,A.CENTRO_COSTO)

UNION ALL

(SELECT 'DESCUENTOS' AS MOTIVO, B.NUMERO_NOMINA, A.CENTRO_COSTO,
SUM(B.TOTAL) MONTO
FROM
LUKOLL.EMPLEADO A INNER JOIN LUKOLL.EMPLEADO_CONC_NOMI B ON A.EMPLEADO=B.EMPLEADO
WHERE
CONCEPTO IN ('DANQ','DAOB','DASU','DAUT','DAVA','DCAN','DCOM','DDJT','DDJU','DEPS','DEVI','DGRA','DMER','DODE','DPAL','DPPE','DQTA','DSEG','DSNP','DTAR')
--AND A.ACTIVO='S'
AND
B.NUMERO_NOMINA>=141
AND B.NUMERO_NOMINA<=142
GROUP BY B.NUMERO_NOMINA,A.CENTRO_COSTO)

UNION ALL

(SELECT 'DESCONTAR' AS MOTIVO, B.NUMERO_NOMINA, A.CENTRO_COSTO,
SUM(B.TOTAL) MONTO
FROM
LUKOLL.EMPLEADO A INNER JOIN LUKOLL.EMPLEADO_CONC_NOMI B ON A.EMPLEADO=B.EMPLEADO
WHERE
CONCEPTO IN ('ICTS','IGRM','IBER')
--AND A.ACTIVO='S'
AND
B.NUMERO_NOMINA>=141
AND B.NUMERO_NOMINA<=142
GROUP BY B.NUMERO_NOMINA,A.CENTRO_COSTO)



muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 150
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

unir consulta y que tenga una sola "variable"

Publicado por Francisco (62 intervenciones) el 19/04/2024 16:29:06
Hola,

No especificas que motor de base de datos usas y tampoco si estas usando un lenguaje de programacion en especifico.

Puedes usar bindings donde usas marcadores de posición en tus consultas en lugar de valores fijos. Estos marcadores luego se rellenan con valores reales en tiempo de ejecución usando variables vinculadas (bind variables).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--MySQL
 
SELECT nombre, correo_electronico
FROM usuarios
WHERE id = ?;
 
--PostgreSQL
 
SELECT nombre, correo_electronico
FROM usuarios
WHERE id = $1;
 
--SQL Server
 
SELECT Nombre, CorreoElectronico
FROM Clientes
WHERE ClienteID = @IDCliente;
 
--SQLite
SELECT nombre, correo_electronico
FROM usuarios
WHERE id = ?;

Par tu caso en concreto, dependiendo del motor de Base de datos

1
2
3
4
5
B.NUMERO_NOMINA>=?  AND B.NUMERO_NOMINA<= ?
 
B.NUMERO_NOMINA>=$1  AND B.NUMERO_NOMINA<= $2
 
B.NUMERO_NOMINA>=@nominaA  AND B.NUMERO_NOMINA<= @nominaB


En google hay mucha informacion al respecto

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

unir consulta y que tenga una sola "variable"

Publicado por Neil (2 intervenciones) el 19/04/2024 17:23:29
gracias Francisco
uso SQL
mi query quedo así


SELECT I.NUMERO_NOMINA, I.CENTRO_COSTO, COUNT(DISTINCT I.EMPLEADO) AS NUM_EMPLEADOS,
SUM(I.MONTO_BRUTO_TOTAL) MONTO_BRUTO_TOTAL, SUM(D.MONTO_DESCUENTO) MONTO_DESCUENTO, SUM(I.MONTO_BRUTO_TOTAL-D.MONTO_DESCUENTO) AS MONTO_NETO,
SUM(OD.MONTO_OTRO) OTRO_DESCU, SUM(I.MONTO_BRUTO_TOTAL-OD.MONTO_OTRO) AS MONTO_SIN
FROM
(SELECT A.EMPLEADO, A.ACTIVO, A.ESTADO_EMPLEADO,
B.NUMERO_NOMINA, A.CENTRO_COSTO,
SUM(B.TOTAL) MONTO_BRUTO_TOTAL
FROM
LUKOLL.EMPLEADO A INNER JOIN LUKOLL.EMPLEADO_CONC_NOMI B ON A.EMPLEADO=B.EMPLEADO
WHERE
CONCEPTO IN ('IAES','IAFA','IAFL','IAMA','IBER','IBEX','IBON','ICAN','ICOM','ICTM','IDIE','IGRA','IGRE','IGRM','IHEA','IHEB','IHEC','IINC','IMOV','IOIN','IOIR','IPAL','IPRE','ISUB','ISUE','ISUM','IUTI','IVAC','IVAV')
GROUP BY B.NUMERO_NOMINA,A.CENTRO_COSTO,A.EMPLEADO, A.ACTIVO, A.ESTADO_EMPLEADO) AS I

INNER JOIN

(SELECT A.EMPLEADO, A.ACTIVO, A.ESTADO_EMPLEADO,
B.NUMERO_NOMINA, A.CENTRO_COSTO,
SUM(B.TOTAL) MONTO_DESCUENTO
FROM
LUKOLL.EMPLEADO A INNER JOIN LUKOLL.EMPLEADO_CONC_NOMI B ON A.EMPLEADO=B.EMPLEADO
WHERE
CONCEPTO IN ('DANQ','DAOB','DASU','DAUT','DAVA','DCAN','DCOM','DDJT','DDJU','DEPS','DEVI','DGRA','DMER','DODE','DPAL','DPPE','DQTA','DSEG','DSNP','DTAR')
GROUP BY B.NUMERO_NOMINA,A.CENTRO_COSTO, A.EMPLEADO, A.ACTIVO, A.ESTADO_EMPLEADO) AS D
ON I.NUMERO_NOMINA=D.NUMERO_NOMINA AND I.CENTRO_COSTO=D.CENTRO_COSTO AND I.EMPLEADO=D.EMPLEADO

INNER JOIN

(SELECT A.EMPLEADO, A.ACTIVO, A.ESTADO_EMPLEADO,
B.NUMERO_NOMINA, A.CENTRO_COSTO,
SUM(B.TOTAL) MONTO_OTRO
FROM
LUKOLL.EMPLEADO A INNER JOIN LUKOLL.EMPLEADO_CONC_NOMI B ON A.EMPLEADO=B.EMPLEADO
WHERE
CONCEPTO IN ('ICTS','IGRM','IBER')
GROUP BY B.NUMERO_NOMINA,A.CENTRO_COSTO, A.EMPLEADO, A.ACTIVO, A.ESTADO_EMPLEADO) AS OD

ON I.NUMERO_NOMINA=OD.NUMERO_NOMINA AND I.CENTRO_COSTO=OD.CENTRO_COSTO AND I.EMPLEADO=D.EMPLEADO AND D.EMPLEADO=OD.EMPLEADO

WHERE
I.NUMERO_NOMINA>=? AND I.NUMERO_NOMINA<=?
--AND I.ACTIVO='S'

GROUP BY
I.NUMERO_NOMINA, I.CENTRO_COSTO
ORDER BY I.NUMERO_NOMINA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco
Val: 150
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

unir consulta y que tenga una sola "variable"

Publicado por Francisco (62 intervenciones) el 25/04/2024 20:12:51
Hola

Eso no lo puedes ejecutar en directo te tienes que ayudar con las sentencias PREPARE, EXECUTE y DEALLOCATE porque estas usando bindings, y puede variar dependiendo del motor de base de datos;


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar