SQL - De Excel a SQL [AUXILIO]

 
Vista:
Imágen de perfil de kjsbtby
Val: 5
Ha disminuido su posición en 14 puestos en SQL (en relación al último mes)
Gráfica de SQL

De Excel a SQL [AUXILIO]

Publicado por kjsbtby (3 intervenciones) el 07/03/2019 00:40:22
Buenas, pueden decirme kj para que sea sencillo.
o nombre de usuario.

Trabajo para una empresa de venta al mayoreo y menudeo de refacciones automotrices.
Ejerzo el puesto de inventarista. Sin embargo me encuentro a menudo haciendo tablas de excel para mis superiores ya que tengo experiencia en estas y nuestro sistema de ventas carece de ciertas opciones que los superiores desean.

Recientemente me pidieron una tabla donde pudiese separarles ciertas ventas dependiendo de las unidades de negocio tomando en cuenta el costo de cada parte. Las partes estan categorisadas con "lineas" y las facturas no distinguen entre lineas o partes, ya que unas lineas se toman en cuenta como mano de obra.

Toda esta informacion esta en una base de datos la cual yo consulto con este SQL:

1
2
3
4
5
6
7
8
9
10
11
SELECT 	 	titm_0.sid, tkt_0.inum, tkt_0.type, ct_0.logname, titm_0.line, tkt_0.idate, tkt_0.anum,
 	 	 	titm_0.sell, titm_0.qtysold, titm_0.pcore, tkt_0.subnt, tkt_0.subt, tkt_0.misc,
 	 	 	tkt_0.cornt, tkt_0.cort, tkt_0.tfrght, tkt_0.ttax, titm_0.id, tkt_0.workorder
 
FROM 	 	PACE.PUB.ct ct_0, PACE.PUB.titm titm_0, PACE.PUB.tkt tkt_0
 
	WHERE 		ct_0.sid = titm_0.sid AND ct_0.sid = tkt_0.sid AND ct_0.id = tkt_0.id AND
 	 	 	 	titm_0.sid = tkt_0.sid AND titm_0.tnum = tkt_0.tnum AND
 	 	 	 	((tkt_0.idate>{d '2018-12-31'}))
 
ORDER BY tkt_0.idate DESC

Esa consulta la importo a Excel y sobre esta yo trabajo para generar una tabla dinámica que mis jefes pueden usar para tomar sus decisiones.

Todo perfecto... Pero el problema es que tengo una i7 de 8tava generación y aun así le toma a la pobre computadora actualizar la tabla al rededor de 2 horas. Y aveces el reporte se corrompe y debo volver a hacer todo.

Yo se que se debe a que tengo muchos datos... Pero el verdadero problema esta en que en mi Excel tengo estas formulas:

Sintaxis-humana-del-reporte-de-ventas

Como pueden ver, realmente tengo UN COCHINERO de formulas en diversos campos. Quiero intentar hacer algunas de esas columnas en SQL... Siendo honesto eh estado echándole coco desde hace dos días, y nada viene a mi cabeza. Realmente ya perdí la esperanza de hacer la ultima columna calculada "Tkt" yo le llamo Ticket, pero si pudiese calcular las otras, como la "concatacion de #factura con linea + contar.si.conjunto", el "importe total sin repetir" o la "Unidad de negocio"

Debo declarar que NO PUEDO MODIFICAR la base de datos, esto se debe a que esta es administrada por la compañia que nos provee el punto de venta, y solo podemos consultarla.

Estoy algo desesperado, cualquiera que quisiera auxiliar es bienvenido, acepto concejos de como deberia aproximar a estas columnas personalisadas, eh intentado "CASE ()" tras "CASE()" y realmente nada me ah funcionado.

En la imagen esta la formula que uso en excel, y un escrito en español de lo que hace el proceso.

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 Othoniel
Val: 5
Ha disminuido su posición en 14 puestos en SQL (en relación al último mes)
Gráfica de SQL

De Excel a SQL [AUXILIO]

Publicado por Othoniel (3 intervenciones) el 07/03/2019 01:50:57
Agrego:

En la columna TKT, no solo me sirve para contar cada factura diferente, eso es sencillo, esa columna la necesito por que entre las lineas TDS es prioritario luego FYE, asi que ocupo que el "1" este SOLO en la fila que lleva TDS o FYE si es que en esa factura se vendio un producto cuya linea es TDS o FYE. Es esa la razon del por que TKT esta tan complejo. Siendo honesto no espero que esto se pueda lograr en SQL sin embargo, cualquier otra columna que se pueda hacer en SQL que estoy seguro si se puede, solo no se como, seria de gran ayuda.
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 Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

De Excel a SQL [AUXILIO]

Publicado por Isaias (1921 intervenciones) el 07/03/2019 21:04:48
¿En que motor de base de datos esta su sistema de PUNTO DE VENTA?
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 KJzsbtby
Val: 5
Ha disminuido su posición en 14 puestos en SQL (en relación al último mes)
Gráfica de SQL

De Excel a SQL [AUXILIO] - Motor

Publicado por KJzsbtby (3 intervenciones) el 07/03/2019 22:44:08
Mmh... No se si es correcto, pero se consulta ODBC por progress, pero la sintaxis es SQL~

En cuanto el punto de venta esta soportado en linux, pero en esta situación el punto de venta no se toma en cuenta ya que es punto y aparte, ya que este es intocable legalmente.

Eh estado investigando y creo que podria hacer unas cosas con "LEAD()" y "LAG()"

Pero no tengo idea de como usarlos adecuadamente.

Aprovecho para dejar claro algunas cosas:

El proceso tarda 2 horas EN LOS CALCULOS QUE HACE EXCEL, la consulta de SELECT por SQL ODBC solo le toma como 5 minutos, la cantidad de filas que usa son al rededor de 900k de filas, por lo que es entendible que tome un monton en hacer los calculos. La intencion es que los calculos los haga en SQL y en excel se hagan los menos posibles.

En cuanto a:

1
2
3
4
5
6
7
FROM 	 	PACE.PUB.ct ct_0, PACE.PUB.titm titm_0, PACE.PUB.tkt tkt_0
 
	WHERE 		ct_0.sid = titm_0.sid AND ct_0.sid = tkt_0.sid AND ct_0.id = tkt_0.id AND
 	 	 	 	titm_0.sid = tkt_0.sid AND titm_0.tnum = tkt_0.tnum AND
 	 	 	 	((tkt_0.idate>{d '2018-12-31'}))
 
ORDER BY tkt_0.idate DESC

Me dijeron que podria acomodarlo asi:

1
2
3
4
5
6
7
8
9
10
FROM 	 	PACE.PUB.ct ct_0
			inner join	PACE.PUB.titm titm_0
				on ct_0.sid = titm_0.sid AND ct_0.sid = tkt_0.sid AND ct_0.id = tkt_0.id
			 inner join PACE.PUB.tkt tkt_0
				on titm_0.sid = tkt_0.sid AND titm_0.tnum = tkt_0.tnum
 
	WHERE
 	 	 	 	tkt_0.idate>'20181231'
 
ORDER BY tkt_0.idate DESC

Lo cual concidero es mejor. Pero aun no lo pruebo.

Pero quiero aclarar que "ct_id" y "tkt_id" son IDs de los trabajadores, no son unicos de cada fila y se comparten con sus "ct_logname".
La tabla CT es de cuentas, la TITM es de los objetos dentro de la factura, y TKT es basicamente el header de la factura. Donde Tnum es un numero interno que comparte la factura con las demas tablas. Pero Inum es el numero unico e importante de la factura.

Gracias por la respuesta~
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