SQL Server - Ayuda con Consulta Sql Server

 
Vista:
sin imagen de perfil

Ayuda con Consulta Sql Server

Publicado por Marco (1 intervención) el 03/09/2013 21:03:12
Buen día amigos, necesito ayuda con una consulta y me gustaria ver si me pueden echar la mano con esto.

Bueno, estoy trabajando en el mostrado de una tabla para un sistema portuario, la verdad soy programador Junior y hasta este punto me he perdido.

necesito consultar fecha, nombre de un buque, terminal, nombre de agencia naviera y productos.

les pongo la consulta aqui:


SELECT TOP 200 ENC.EncabezadoID AS ID, CONVERT(VARCHAR(10), ENC.FechaArribo, 103) AS FechaIni, BUQ.Nombre AS NombreBuq, AN.NOMBRE AS NombreNav, T.Nombre AS NombreTerminal, TIPRO.Nombre AS NombreProducto FROM PVM.dbo.EncabezadoEDH ENC
INNER JOIN APISOP.SP3LAC.SOPSCH.Buques BUQ ON BUQ.BuqueID = ENC.BuqueID
INNER JOIN APISOP.SP3LAC.SOPSCH.TX_TAGNAV AN ON AN.NAVID = ENC.AgenciaID
INNER JOIN APISOP.SP3LAC.SOPSCH.PrgBuques PB ON PB.PrgBuqueID = ENC.PrgBuqueID
INNER JOIN APISOP.SP3LAC.SOPSCH.EnmiendaReal ER ON ER.EnmiendaRealID = ENC.EnmiendaRealID
INNER JOIN APISOP.SP3LAC.SOPSCH.Muelles M ON M.MuelleID = ER.Muelle
INNER JOIN APISOP.SP3LAC.SOPSCH.Terminal T ON T.TerminalID = M.Terminal
INNER JOIN PVM.dbo.ProductoEDH PRO ON PRO.EncabezadoID = ENC.EncabezadoID
INNER JOIN PVM.dbo.Tipos_Producto TIPRO ON TIPRO.TipoProductoID = PRO.TipoProductoID ORDER BY ENC.FechaArribo DESC

El detalle aqui es que para sacar los productos necesito mandar llamar un procedimiento almacenado usando otro prepared statement y otro result set, esto lo hago para que me agrupe los productos en una sola celda de todos los rows que precisamente su unica diferencia sea el producto, osea que si el ID, Buque, Naviera, Terminal son identicos, y en productos tenga por ejemplo "Autos Honda" y otro igual pero con "Auto Susuki", aparezca uno solo que diga "Autos Honda, Auto Susuki"

les pongo la parte donde llamo el procedimiento.

while (rsBuques.next()) {

info = new TablaBuquesEDHBean();
info.setId(rsBuques.getInt("ID"));
info.setFecha(rsBuques.getString("FechaIni"));
info.setBuque(rsBuques.getString("NombreBuq"));
info.setNaviera(rsBuques.getString("NombreNav"));
info.setTerminal(rsBuques.getString("NombreTerminal"));
psProducto=con.prepareStatement("EXEC getProductosEncabezado"+info.getId());
rsProducto=psProducto.executeQuery();
while(rsProducto.next()){
info.setProductos(rsProducto.getString("lista"));
}
listabla.add(info);
rsProducto.close();
psProducto.close();

}


Ahora, el problema que tengo es que me aparecen rows repetidos, pareciera que uno por producto. les pongo el código del procedimiento para agrupar.

ALTER PROCEDURE [dbo].[getProductosEncabezado]
-- Add the parameters for the stored procedure here
@encID int
AS
BEGIN
DECLARE @lstProd VARCHAR(MAX), @lstTrafico VARCHAR(MAX), @ton DECIMAL(18,2), @unidades INT;
SET NOCOUNT ON;

SELECT @lstProd = COALESCE(@lstProd+', ' ,'') + TP.Nombre
FROM PVM.dbo.ProductoEDH AS P
JOIN PVM.dbo.Tipos_Producto AS TP ON TP.TipoProductoID = P.TipoProductoID
WHERE P.EncabezadoID = @encID

SELECT @lstTrafico = COALESCE(@lstTrafico+', ' ,'') + Nombre
FROM (
SELECT DISTINCT TF.Nombre
FROM PVM.dbo.ProductoEDH AS P
JOIN PVM.dbo.Tipos_Operacion AS TIOP ON TIOP.TipoOperacionID = P.TipoOperacionID
JOIN APISOP.SP3LAC.SOPSCH.TiposTrafico AS TF ON TF.TipoTraficoID = TIOP.TipoTraficoID
WHERE P.EncabezadoID = @encID
) tbl;

SELECT @ton = SUM(P.TonelajeReal)
FROM PVM.dbo.ProductoEDH AS P
WHERE P.EncabezadoID = @encID

IF @ton = 0
BEGIN
SELECT @ton = SUM(P.TonelajeAprox)
FROM PVM.dbo.ProductoEDH AS P
WHERE P.EncabezadoID = @encID
END

SELECT @unidades = SUM(P.Piezas) FROM PVM.dbo.ProductoEDH P
JOIN PVM.dbo.EncabezadoEDH E ON E.EncabezadoID = P.EncabezadoID
WHERE E.EncabezadoID = @encID

SELECT UPPER(@lstProd) AS lista, UPPER(@lstTrafico) AS listaTrafico, @ton AS tonelaje, @unidades AS unidades
END


Y les coloco adjunto un pantallazo de cómo me aparece el resultado.



Amigos programadores, les agradecería cualquier tipo de ayuda. Saludos!
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