CONSULTA SQL VARIAS TABLAS Y LIMITAR DATOS VINCULADOS
Publicado por Duilio Berardinelli (1 intervención) el 03/02/2017 15:27:51
Buenos dias grupo
Presento mi problema.
Tengo un a consulta en sql con 6 tablas
ESTA ES LA CONSULTA
SELECT GVA12.FECHA_EMIS as FECHA, GVA12.T_COMP AS 'T/C', GVA12.N_COMP AS NUMERO, GVA12.COD_CLIENT AS CLIENTE, GVA14.RAZON_SOCI AS 'RAZON SOCIAL', GVA14.DOMICILIO, ISNULL(CPA01_1.NOM_PROVEE, '') + ISNULL(CPA01_1.NOM_PROVEE, '')
AS PROVEEDOR, GVA12.PORC_BONIF AS '% BONIF', STA11.COD_ARTICU AS ARTICULO, STA11.COD_BARRA AS BARRA, STA11.SINONIMO, STA11.DESCRIPCIO AS DESCRIPCION, STA11.DESC_ADIC AS 'DESCRIPCION ADICIONAL', STA11.COD_ACTIVI AS ACTIVIDAD, GVA53.COD_DEPOSI AS DEPOSITO,
(CASE WHEN GVA12.T_COMP='N/C' THEN (GVA53.CANTIDAD*-1) ELSE GVA53.CANTIDAD END) AS CANTIDAD,
GVA53.PORC_IVA AS '% IVA',
ROUND(GVA53.PRECIO_PAN / (1 + GVA53.PORC_IVA / 100), 2) AS 'PRECIO NETO',
GVA53.PORC_DTO AS '% DTO',
ROUND(GVA53.PRECIO_NET, 2) AS 'PRECIO C/DTO',
(CASE WHEN GVA12.T_COMP='N/C' THEN (GVA53.IMP_NETO_P*-1) ELSE GVA53.IMP_NETO_P END) AS 'NETO GRAVADO',
(CASE WHEN GVA12.T_COMP='N/C' THEN (GVA53.IMPORTE_EXENTO*-1) ELSE GVA53.IMPORTE_EXENTO END) AS EXENTO,
GVA53.PREC_ULC_L AS 'PRECIO ULT/CPRA',
(CASE WHEN GVA12.T_COMP='N/C' THEN ((GVA53.PREC_ULC_L * GVA53.CANTIDAD)*-1) ELSE (GVA53.PREC_ULC_L * GVA53.CANTIDAD) END) AS 'COSTO VTA'
FROM CPA01 AS CPA01_1 FULL OUTER JOIN
CPA15 AS CPA15_1 RIGHT OUTER JOIN
GVA14 RIGHT OUTER JOIN
GVA12 ON GVA14.COD_CLIENT = GVA12.COD_CLIENT LEFT OUTER JOIN
GVA53 ON GVA12.T_COMP = GVA53.T_COMP AND GVA12.N_COMP = GVA53.N_COMP LEFT OUTER JOIN
STA11 ON GVA53.COD_ARTICU = STA11.COD_ARTICU ON CPA15_1.COD_ARTICU = STA11.COD_ARTICU ON CPA01_1.COD_PROVEE = CPA15_1.COD_PROVEE
WHERE (GVA12.T_COMP = 'FAC' OR
GVA12.T_COMP = 'N/C' OR
GVA12.T_COMP = 'N/D') AND (GVA53.PROMOCION = '0') AND (GVA12.FECHA_EMIS > CONVERT(DATETIME, '2017-01-01 00:00:00', 102)) AND (GVA12.FECHA_EMIS < CONVERT(DATETIME,
'2017-12-31 00:00:00', 102))
ORDER BY GVA12.FECHA_EMIS, GVA12.T_COMP, GVA12.N_COMP
en problema que tengo es que en la union cpa15 y cpa01 que es la ultima union que hago necesito que solo me devuelva 1 solo registro (explicacion) la tabla sta11 de articulos se une a cpa15 que contiene la relacion articulos proveedores, lo que necesito es que solo me muestre en esta union solo el 1º registro encontrado y no todos
(aclaracion) la tabla gva53 que se une con sta11 es la de movimientos de ventas
En este resultado hay 2 registros cuando corresponde solo 1 ya que el duplicado es porque el articulo tiene asociado 2 proveedores
Desde ya muchas gracias
Presento mi problema.
Tengo un a consulta en sql con 6 tablas
ESTA ES LA CONSULTA
SELECT GVA12.FECHA_EMIS as FECHA, GVA12.T_COMP AS 'T/C', GVA12.N_COMP AS NUMERO, GVA12.COD_CLIENT AS CLIENTE, GVA14.RAZON_SOCI AS 'RAZON SOCIAL', GVA14.DOMICILIO, ISNULL(CPA01_1.NOM_PROVEE, '') + ISNULL(CPA01_1.NOM_PROVEE, '')
AS PROVEEDOR, GVA12.PORC_BONIF AS '% BONIF', STA11.COD_ARTICU AS ARTICULO, STA11.COD_BARRA AS BARRA, STA11.SINONIMO, STA11.DESCRIPCIO AS DESCRIPCION, STA11.DESC_ADIC AS 'DESCRIPCION ADICIONAL', STA11.COD_ACTIVI AS ACTIVIDAD, GVA53.COD_DEPOSI AS DEPOSITO,
(CASE WHEN GVA12.T_COMP='N/C' THEN (GVA53.CANTIDAD*-1) ELSE GVA53.CANTIDAD END) AS CANTIDAD,
GVA53.PORC_IVA AS '% IVA',
ROUND(GVA53.PRECIO_PAN / (1 + GVA53.PORC_IVA / 100), 2) AS 'PRECIO NETO',
GVA53.PORC_DTO AS '% DTO',
ROUND(GVA53.PRECIO_NET, 2) AS 'PRECIO C/DTO',
(CASE WHEN GVA12.T_COMP='N/C' THEN (GVA53.IMP_NETO_P*-1) ELSE GVA53.IMP_NETO_P END) AS 'NETO GRAVADO',
(CASE WHEN GVA12.T_COMP='N/C' THEN (GVA53.IMPORTE_EXENTO*-1) ELSE GVA53.IMPORTE_EXENTO END) AS EXENTO,
GVA53.PREC_ULC_L AS 'PRECIO ULT/CPRA',
(CASE WHEN GVA12.T_COMP='N/C' THEN ((GVA53.PREC_ULC_L * GVA53.CANTIDAD)*-1) ELSE (GVA53.PREC_ULC_L * GVA53.CANTIDAD) END) AS 'COSTO VTA'
FROM CPA01 AS CPA01_1 FULL OUTER JOIN
CPA15 AS CPA15_1 RIGHT OUTER JOIN
GVA14 RIGHT OUTER JOIN
GVA12 ON GVA14.COD_CLIENT = GVA12.COD_CLIENT LEFT OUTER JOIN
GVA53 ON GVA12.T_COMP = GVA53.T_COMP AND GVA12.N_COMP = GVA53.N_COMP LEFT OUTER JOIN
STA11 ON GVA53.COD_ARTICU = STA11.COD_ARTICU ON CPA15_1.COD_ARTICU = STA11.COD_ARTICU ON CPA01_1.COD_PROVEE = CPA15_1.COD_PROVEE
WHERE (GVA12.T_COMP = 'FAC' OR
GVA12.T_COMP = 'N/C' OR
GVA12.T_COMP = 'N/D') AND (GVA53.PROMOCION = '0') AND (GVA12.FECHA_EMIS > CONVERT(DATETIME, '2017-01-01 00:00:00', 102)) AND (GVA12.FECHA_EMIS < CONVERT(DATETIME,
'2017-12-31 00:00:00', 102))
ORDER BY GVA12.FECHA_EMIS, GVA12.T_COMP, GVA12.N_COMP
en problema que tengo es que en la union cpa15 y cpa01 que es la ultima union que hago necesito que solo me devuelva 1 solo registro (explicacion) la tabla sta11 de articulos se une a cpa15 que contiene la relacion articulos proveedores, lo que necesito es que solo me muestre en esta union solo el 1º registro encontrado y no todos
(aclaracion) la tabla gva53 que se une con sta11 es la de movimientos de ventas
En este resultado hay 2 registros cuando corresponde solo 1 ya que el duplicado es porque el articulo tiene asociado 2 proveedores
Desde ya muchas gracias
Valora esta pregunta
0