Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Que tipo de consulta seria (https://www.clubdelphi.com/foros/showthread.php?t=93460)

dfarias 05-10-2018 19:02:55

Que tipo de consulta seria
 
Como puedo generar la siguiente consulta desde

la tabla que tiene estos dos campos:

COD DETALLE
1000 XXXXXXXXXXXXXX-----
1100 YYYYYYYYYYYYYYY---
1200 ZZZZZZZZZZZZZ----
2000 XXXXXXXXXXXXXX-----
2300 YYYYYYYYYYYYYYY---
2240 ZZZZZZZZZZZZZ----


quiero obtener el siguiente resultado generando la columna COD_MAESTRO

COD DETALLE COD_MAESTRO
1000 XXXXXXXXXXXXXX----- 1000
1100 YYYYYYYYYYYYYYY--- 1000
1200 ZZZZZZZZZZZZZ---- 1000
2000 XXXXXXXXXXXXXX----- 2000
2300 YYYYYYYYYYYYYYY-- 2000
2240 ZZZZZZZZZZZZZ---- 2000

Casimiro Notevi 05-10-2018 19:25:39

Por favor, lee nuestra guía de estilo, gracias.

A ver si aprendemos a poner títulos descriptivos.
A hacer preguntas claras.
A poner ejemplos que sirvan.
¿Tu teclado tampoco tiene signos de interrogación, ni letras acentuadas, comas, puntos, etc.?

ecfisa 05-10-2018 19:52:26

Hola.


Supongo que debería ser algo así:
Código SQL [-]
SELECT D.CODIGO, D.DETALLE, M.CODIGO
FROM DETALLE D
INNER JOIN MAESTRO M ON D.COD_MAESTRO = M.CODIGO

Te sugiero leer este enlace para ampliar mas sobre el tema.

Saludos :)

Casimiro Notevi 05-10-2018 20:13:13

Vaya, pues yo no había entendido que preguntaba nada de eso :confused:

ecfisa 05-10-2018 20:26:36

Cita:

Empezado por Casimiro Notevi (Mensaje 528836)
Vaya, pues yo no había entendido que preguntaba nada de eso :confused:

Tal vez me aventuré y yo tampoco :D

Saludos :)

dfarias 07-10-2018 23:05:16

La consulta es expresamente sobre la misma tabla. No existe un maestro por eso la pregunta de como se podria hacer.

ecfisa 08-10-2018 05:00:10

Hola.

Sería bueno conocer la definición de la tabla, al menos de los campos involucrados en la consulta.
Así como también una explicación detallada del resultado que deseas obtener, por ejemplo: "Deseo listar los campos A,B,C,... de la tabla MI_TABLA agrupados por el campo B y estos a su vez ordenados por el campo C."

Saludos :)

ElDioni 08-10-2018 14:11:22

Código SQL [-]
SELECT Codigo, Detalle, CINT(Left([Codigo],1)+'000') as Maestro
FROM Tabla


Saludos

movorack 08-10-2018 15:10:57

Cita:

Empezado por dfarias (Mensaje 528850)
La consulta es expresamente sobre la misma tabla. No existe un maestro por eso la pregunta de como se podria hacer.

Al parecer el compañero, en la misma tabla tiene un árbol y como no da muchas explicaciones parece ser que la base es el millar de cada código de producto, entonces podría ser válida la respuesta que da ElDioni


Cita:

Empezado por ElDioni (Mensaje 528855)
Código SQL [-]
SELECT Codigo, Detalle, CINT(Left([Codigo],1)+'000') as Maestro
FROM Tabla


Saludos

o podría ser válida la siguiente respuesta:

Cita:

Empezado por Casimiro Notevi (Mensaje 528836)
Vaya, pues yo no había entendido que preguntaba nada de eso :confused:


ElDioni 08-10-2018 16:02:43

:d :d :d :d :d :d

dfarias 08-10-2018 16:03:27

la tabla posee los siguientes campos pero el que importa para este dilema es el campo CODIGO (Interger)

fecha hora grupo codigo cantidad, etc,
20181001 2000 1 1000 0
20181001 2000 1 1125 5
20181001 2000 1 1999 2


20181001 1530 2 2300 0
20181001 1530 2 2350 3
20181001 1530 2 2390 2


20181005 1230 8 5000 0
20181005 1230 8 1234 2
20181005 1230 8 7890 4



El campo fecha, hora y grupo serian unicos para cada grupo


Lo que quiero conseguir es que la query devuelva lo siguiente


fecha hora grupo codigo cantidad, codigo_maestro, etc
20181001 2000 1 1000 0 1000
20181001 2000 1 1125 5 1000
20181001 2000 1 1999 2 1000


20181001 1530 2 2300 0 2300
20181001 1530 2 2350 2 2300
20181001 1530 2 2390 3 2300

20181005 1230 8 5000 0 5000
20181005 1230 8 1234 2 5000
20181005 1230 8 7890 4 5000

ElDioni 08-10-2018 16:06:43

Pero, por favor, quieres explicar como coñ... quieres calcular el campo maestro para no dar palos de ciego todo el rato, no ves que no tenemos ni idea de donde sale ni como lo obtienes ni en que te fijas para sacarlo, queremos ayudarte pero no pones mucho de tu parte.


Saludos.

Casimiro Notevi 08-10-2018 16:28:16

A ver si nos traen del taller la bola de cristal ;)

dfarias 08-10-2018 16:52:50

Vamos a ver. El campo CODIGO_MAESTRO es lo que quiero que la consulta me cree en la devolucion de la misma.

Como se puede ver en los registros de la tabla este campo CODIGO sera el que utilize para general el CODIGO_MAESTRO que sera aquel cullas filas tenga el campo grupo igual a 0.

Entonces quiero que este codigo se repita en el nuevo campo generado (CODIGO_MAESTRO) para todos los registros que formen parte del grupo que se obtine fomando la clave fecha-hora-grupo.




fecha hora grupo codigo cantidad, codigo_maestro, etc
20181001 2000 1 1000 0 1000
20181001 2000 1 1125 5 1000
20181001 2000 1 1999 2 1000



20181001 1530 2 2350 2 2300
20181001 1530 2 2390 3 2300
20181001 1530 2 2300 0 2300


20181005 1230 8 5000 0 5000
20181005 1230 8 1234 2 5000
20181005 1230 8 7890 4 5000

movorack 08-10-2018 17:00:37

Lo que quieres es representar un árbol en una consult. Te recomiendo estas lecturas:

How to represent a tree structure numerically in SQL Server

How to represent a data tree in SQL?

orodriguezca 08-10-2018 23:03:56

Yo entendí que lo que dfarias quiere es esto:

Código SQL [-]
select A.FECHA, A.HORA, A.GRUPO, A.CODIGO, A.CANTIDAD, B.GRUPO AS CODIGO_MAESTRO 
from TABLA A
inner join TABLA B 
    on B.FECHA = A.FECHA
   and B.HORA  = A.HORA 
   and B.GRUPO = A.GRUPO 
   and B.CANTIDAD = 0

Casimiro Notevi 08-10-2018 23:10:50

Pues yo creo entender que... no lo he entendido todavía :confused:

abelg 12-10-2018 16:22:06

No se si logre entender tu pedido, pero te dejo un demo en MS Sql Server.

Código SQL [-]
CREATE TABLE #Tablax (
  id int identity,
  fecha datetime,
  hora int,
  grupo int,
  codigo int,
  cantidad int
)

insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181001', 2000, 1, 1000, 0)
insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181001', 2000, 1, 1125, 5) 
insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181001', 2000, 1, 1999, 2) 

insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181001', 1530, 2, 2350, 2)
insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181001', 1530, 2, 2390, 3)
insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181001', 1530, 2, 2300, 0)

insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181005', 1230, 8, 5000, 0)
insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181005', 1230, 8, 1234, 2)
insert #Tablax(fecha, hora, grupo, codigo, cantidad) values('20181005', 1230, 8, 7890, 4)

Select rt.*, tmaster.codigo cod_master
From #Tablax rt
inner join (
      Select tt.Fecha, tt.hora, tt.grupo, tt.codigo 
      from #Tablax tt
      inner join (Select t.fecha, t.hora, t.grupo, min(t.cantidad) ctmin
            from #Tablax t
            group by t.fecha, t.hora, t.grupo) tm on tm.fecha = tt.fecha and 
                                tm.hora = tt.hora and 
                                tm.grupo = tt.grupo and 
                                tm.ctmin = tt.cantidad
            ) tmaster on tmaster.fecha = rt.fecha 
                  and tmaster.hora = rt.hora 
                  and tmaster.grupo = rt.grupo 
Order by rt.id


Drop table #Tablax

Hay una aproximacion a tu tabla (la tabla temporal creada).
creo que si no es necesario agrupar por hora se puede quitar del grupo.
Saludos

ElDioni 31-10-2018 16:59:09

Hola dfarias, además de que no terminas de explicar correctamente nada, tampoco te has dignado a agradecer ni a comentar las ayudas propuestas por los compañeros del foro, escribe algo jomio, ¿te ha servido algo?, ¿has solucionado tu problema?, ¿has reventado con un martillo tu ordenador y por eso no puedes escribir?.


Saludos.


La franja horaria es GMT +2. Ahora son las 09:56:19.

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