Estoy tratando de crear una consulta SQL para un informe de inventario. Hasta ahora, he creado una consulta SQL que recupera con éxito números de pieza únicos junto con su descripción y Cantidad disponible. Me gustaría agregar el nombre del cliente a mi informe, pero dado que vendemos algunas partes a múltiples clientes, agregar esto causa duplicados en los números de parte y en las Cantidades disponibles, a pesar de la declaración DISTINCT. ¿Hay alguna forma de limitar los resultados a un solo cliente listado por parte? Soy nuevo en SQL, así que imagino que me falta algo obvio. Aquí está mi consulta:

Consulta SQL

select distinct [Part].[PartNum] as [Part_PartNum]
    , [Part].[PartDescription] as [Part_PartDescription]
    , [PartBin].[OnhandQty] as [PartBin_OnhandQty] 
from Erp.Part as Part 
inner join Erp.ShipDtl as ShipDtl on Part.Company = ShipDtl.Company 
                            And Part.PartNum = ShipDtl.PartNum 
inner join Erp.PartBin as PartBin on Part.Company = PartBin.Company 
                            And Part.PartNum = PartBin.PartNum 
order by Part.PartNum 
0
Alice Elizabeth 7 mar. 2017 a las 18:41

2 respuestas

La mejor respuesta

Usando Epicor, veo ...

¿Hay alguna razón por la que te unes a la tabla ShipDtl, ya que tu declaración select solo está retirando información de las tablas Part y PartBin? Intenta lo siguiente:

SELECT p.PartNum, PartDescription, OnHandQty
FROM erp.Part AS Part INNER JOIN
     erp.PartBin AS PartBin ON Part.Company = PartBin.Company and Part.PartNum = PartBin.PartNum

Tenga en cuenta también que si su empresa utiliza varios contenedores, deberá hacer un resumen en el campo OnHandQty para obtener el total de esa empresa, que también requerirá un grupo por estado de cuenta.

1
user2572833 7 mar. 2017 a las 15:48

Algo como lo siguiente podría funcionar. Utiliza una subconsulta para identificar una compañía individual relevante para la parte en cuestión.

Asumí que también hay otra tabla "Compañía" en la que quizás desee obtener algunos detalles de la compañía en lugar de simplemente el campo "Compañía" en el que se está uniendo. Verá que acabo de tomar la compañía "mínima" para ser la que regrese. Hay otras formas de hacer lo mismo. En su lugar, podría tomar la compañía mínima (o máxima o algo más) de la tabla "Parte". Déjame saber cómo te va.

select
    [Part].[PartNum] as [Part_PartNum]
    , [Part].[PartDescription] as [Part_PartDescription]
    , [Company].[CompanyDesc] as [CompanyDesc]
    , [PartBin].[OnhandQty] as [PartBin_OnhandQty] 
from
    Erp.Part as Part 
    inner join
    (
     select
        ShipDtl.PartNum,
        min(ShipDtl.Company) Company
     from
        Erp.ShipDtl
     group by
        ShipDtl.PartNum
    ) as Part1Company ON
        Part.Company = Part1Company.Company AND
        Part.PartNum = Part1Company.PartNum
    inner join Erp.PartBin as PartBin on
        Part.Company = PartBin.Company And
        Part.PartNum = PartBin.PartNum 
    inner join Erp.Company as Company on
        Part.Company = Company.Company
order by
    Part.PartNum
2
Steve Lovell 7 mar. 2017 a las 16:49