Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ayuda con la siguiente consulta (https://www.clubdelphi.com/foros/showthread.php?t=67292)

microbiano 10-04-2010 06:19:22

ayuda con la siguiente consulta
 
hola quiero ver si alguien me puede ayudar con el siguiente problema
tengo las siguentesta tablas:

sap_mrecibos.- la cual es el maestro de los recibos que genere. y l aotra tabla
sap_drecibo.- en la cual guardo el registro del detalle de mis recibos. (adjunto archivos winzip con tablas y datos que tengo).

bien lo que quiero hacer es la siguente consulta que se supone tendria que ser una a muchos. la consulta es la siguiente

Código SQL [-]
SELECT     dbo.SAP_MRECIBO.id_recibo, dbo.SAP_MRECIBO.folio, 
dbo.SAP_MRECIBO.mes, dbo.SAP_MRECIBO.anio, dbo.SAP_MRECIBO.contrato, 
                      dbo.SAP_MRECIBO.fecha_pago, dbo.SAP_MRECIBO.usuario, 
dbo.SAP_MRECIBO.sub_total, dbo.SAP_MRECIBO.descuento, 
                      dbo.SAP_MRECIBO.total_neto, dbo.SAP_MRECIBO.total,
 dbo.SAP_DRECIBO.servicio, dbo.SAP_DRECIBO.importe
FROM         dbo.SAP_MRECIBO LEFT OUTER JOIN
                      dbo.SAP_DRECIBO ON dbo.SAP_MRECIBO.mes = dbo.SAP_DRECIBO.mes AND
 dbo.SAP_MRECIBO.anio = dbo.SAP_DRECIBO.anio AND 
                      dbo.SAP_MRECIBO.contrato = dbo.SAP_DRECIBO.contrato
WHERE     (dbo.SAP_MRECIBO.mes = 1) AND (dbo.SAP_MRECIBO.anio = 2009)

se supone me tendria que considerar un registro de la tabla sap_mrecibo y los 3 registros que tengo en la tabla sap_drecibo, sin embargo no lo hace alguien me podria ayudar o decirme en que estoy mal al hacer mi consulta.

microbiano 10-04-2010 22:22:38

ayuda
 
aun no consigo resolver el problema

Casimiro Notevi 10-04-2010 23:43:15

Cita:

Empezado por microbiano (Mensaje 359890)
[..](adjunto archivos winzip con tablas y datos que tengo). [..]

Ahí sólo hay un .xls :confused:

microbiano 11-04-2010 05:21:33

exacto
 
el archivo xls son las tablas que tengo en el sistema y aqui en el foro puse al consulta que como te digo tendria que ser de unos a muchos pero no me muestra nada espero me puedan ayudar.

esta es la consulta:
Código Delphi [-]
SELECT     SAP_MRECIBO.anio, SAP_MRECIBO.mes,
 SAP_MRECIBO.contrato, SAP_MRECIBO.sub_total, SAP_MRECIBO.descuento,
 SAP_MRECIBO.total_neto, 
                      SAP_DRECIBO.servicio, SAP_DRECIBO.importe
FROM         SAP_MRECIBO LEFT OUTER JOIN
                      SAP_DRECIBO ON SAP_MRECIBO.contrato = SAP_DRECIBO.contrato
 AND SAP_MRECIBO.mes = SAP_DRECIBO.mes AND 
                      SAP_MRECIBO.anio = SAP_DRECIBO.anio
WHERE     (SAP_MRECIBO.mes = 1) AND (SAP_MRECIBO.anio = 2009)

microbiano 13-04-2010 18:18:48

planteo mi consulta de otra manera
 
tengo las siguientes tablas

mcontratos (correspondiente al maestro de recibos)de la siguiente forma

Código SQL [-]
CREATE TABLE [dbo].[mcontratos] (
    [ID_RECIBO] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [FOLIO] [numeric](18, 0) NULL ,
    [MES] [numeric](18, 0) NULL ,
    [ANIO] [numeric](18, 0) NULL ,
    [NO_CONTRATO] [nvarchar] (30) COLLATE Traditional_Spanish_CI_AS NULL ,
    [FECHA_PAGO] [smalldatetime] NULL ,
    [USUARIO] [numeric](16, 0) NULL ,
    [DESCUENTO] [numeric](6, 2) NULL ,
    [SUBTOTAL] [numeric](16, 2) NULL ,
    [TOTAL] [numeric](16, 2) NULL ,
    [NO_LICITACION] [nvarchar] (15) COLLATE Traditional_Spanish_CI_AS NULL ,
    [NUM_PROVEEDOR] [nvarchar] (8) COLLATE Traditional_Spanish_CI_AS NULL ,
    [FECHA_FIRMA] [smalldatetime] NULL ,
    [FECHA_TERMINACION] [smalldatetime] NULL ,
    [RFC_PROVEEDOR] [nvarchar] (15) COLLATE Traditional_Spanish_CI_AS NULL 
) ON [PRIMARY]
GO

y la tabla drecibos(correspondiente al detalle de recibos) de la siguiente forma

Código SQL [-]
CREATE TABLE [dbo].[dcontratos] (
    [ID_RECIBO] [int] IDENTITY (1, 1) NOT NULL ,
    [FOLIO] [numeric](18, 0) NULL ,
    [MES] [numeric](18, 0) NULL ,
    [ANIO] [numeric](18, 0) NULL ,
    [NO_CONTRATO] [nvarchar] (30) COLLATE Traditional_Spanish_CI_AS NULL ,
    [GPO] [nvarchar] (3) COLLATE Traditional_Spanish_CI_AS NULL ,
    [GEN] [nvarchar] (3) COLLATE Traditional_Spanish_CI_AS NULL ,
    [ESP] [nvarchar] (4) COLLATE Traditional_Spanish_CI_AS NULL ,
    [DIF] [nvarchar] (2) COLLATE Traditional_Spanish_CI_AS NULL ,
    [VAR] [nvarchar] (2) COLLATE Traditional_Spanish_CI_AS NULL ,
    [CONCEPTO] [nvarchar] (50) COLLATE Traditional_Spanish_CI_AS NULL ,
    [CANT_MAX] [numeric](10, 0) NULL ,
    [CANT_MIN] [numeric](10, 0) NULL ,
    [PRECIO_CLAVE] [float] NULL ,
    [DESCUENTO] [float] NULL ,
    [IMP_PENA_MAX] [numeric](16, 2) NULL ,
    [PRECIO_NETO] [float] NULL 
) ON [PRIMARY]
GO

ahora bien genero la siguiente consulta
Código SQL [-]
SELECT     dbo.mcontratos.ID_RECIBO, dbo.mcontratos.FOLIO, dbo.mcontratos.MES, dbo.mcontratos.ANIO,
 dbo.mcontratos.NO_CONTRATO, dbo.mcontratos.FECHA_PAGO, 
                      dbo.mcontratos.USUARIO, dbo.mcontratos.DESCUENTO, 
dbo.mcontratos.SUBTOTAL, dbo.mcontratos.TOTAL, dbo.dcontratos.CONCEPTO, 
                      dbo.dcontratos.PRECIO_CLAVE
FROM         dbo.mcontratos LEFT OUTER JOIN
                      dbo.dcontratos ON dbo.mcontratos.FOLIO = dbo.dcontratos.FOLIO 
AND dbo.mcontratos.MES = dbo.dcontratos.MES AND 
                      dbo.mcontratos.ANIO = dbo.dcontratos.ANIO

hasta aqui ningun problema pero cuando trato de agregar el campo de no_contrato y ponerle una condicion ya no me muestra el resultado.

esta es la consulta que ejecuto y no me regresa resultado alguien me podria ayudar
Código SQL [-]
SELECT     dbo.mccontratos.ID_RECIBO, dbo.mccontratos.FOLIO, dbo.mccontratos.MES, dbo.mccontratos.ANIO, dbo.mccontratos.NO_CONTRATO, dbo.mccontratos.FECHA_PAGO, 
                      dbo.mccontratos.USUARIO, dbo.mccontratos.DESCUENTO, dbo.mccontratos.SUBTOTAL, dbo.mccontratos.TOTAL, dbo.adq_clave_contrato.CONCEPTO, 
                      dbo.adq_clave_contrato.PRECIO_CLAVE
FROM         dbo.mccontratos LEFT OUTER JOIN
                      dbo.adq_clave_contrato ON dbo.mccontratos.NO_CONTRATO = dbo.adq_clave_contrato.NO_CONTRATO AND 
                      dbo.mccontratos.FOLIO = dbo.adq_clave_contrato.FOLIO AND dbo.mccontratos.MES = dbo.adq_clave_contrato.MES AND 
                      dbo.mccontratos.ANIO = dbo.adq_clave_contrato.ANIO
WHERE     (dbo.mccontratos.MES = 1) AND (dbo.mccontratos.ANIO = 2009) AND (dbo.mccontratos.FOLIO = 1) AND (dbo.mccontratos.NO_CONTRATO = N'SAP-C2009111104')

Casimiro Notevi 13-04-2010 19:11:08

Así a simple vista sólo se me ocurre que pongas entre paréntesis todo el 'join'.
Y existen datos para que devuelva algo con esos parámetros?

Código SQL [-]
SELECT     dbo.mccontratos.ID_RECIBO, dbo.mccontratos.FOLIO, dbo.mccontratos.MES, dbo.mccontratos.ANIO, dbo.mccontratos.NO_CONTRATO, dbo.mccontratos.FECHA_PAGO, 
                      dbo.mccontratos.USUARIO, dbo.mccontratos.DESCUENTO, dbo.mccontratos.SUBTOTAL, dbo.mccontratos.TOTAL, dbo.adq_clave_contrato.CONCEPTO, 
                      dbo.adq_clave_contrato.PRECIO_CLAVE
FROM         dbo.mccontratos LEFT OUTER JOIN
         (
                      dbo.adq_clave_contrato ON dbo.mccontratos.NO_CONTRATO = dbo.adq_clave_contrato.NO_CONTRATO AND 
                      dbo.mccontratos.FOLIO = dbo.adq_clave_contrato.FOLIO AND dbo.mccontratos.MES = dbo.adq_clave_contrato.MES AND 

                      dbo.mccontratos.ANIO = dbo.adq_clave_contrato.ANIO
          )
WHERE     (dbo.mccontratos.MES = 1) 
AND       (dbo.mccontratos.ANIO = 2009) 
AND       (dbo.mccontratos.FOLIO = 1) 
AND       (dbo.mccontratos.NO_CONTRATO = 'SAP-C2009111104')

microbiano 13-04-2010 21:07:47

Gracias Casimiro
 
los datos que tengo en mi tabla son los que agregue al inicio en el archivo de excel.

y en efecto existen datos para que me devuela una consulta


tendrias alguna idea del por que?
o podrias pasarme un ejemplo de maestro detalle.

gracias por tomarte la molestia de contestar desde mexico gracias

Casimiro Notevi 13-04-2010 21:30:52

Tienes estos datos en las tablas, nada más, no?
Es que parece que sólo hay 3 registros en "detalles", y no veo nada en "maestro".




p.d.: que un moderador habilite la imágenes en este foro, por favor :)

fjcg02 13-04-2010 23:11:23

Tienes blancos y basura al menos en el campo contrato.

Por eso seguramente no te ofrezca ningún registro.

Revísalo y nos comentas.

Saludos

microbiano 14-04-2010 17:45:10

Listo
 
despues de tanto batallar con la consulta que hice, me doy cuenta que en muchas ocasioens hay que revisar el codigo de inserccion, y lo que estaba haciendo es que cuanto hacia el for para insertar los registros en la tabla detalle. insertaba un espacio al final de cada contrato solucionado esto me regresa los datos que necesito muchas gracias por responder y bueno hay que cometer menos errores.


La franja horaria es GMT +2. Ahora son las 20:47:54.

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