2010-02-19 6 views
2

J'ai une table AllocatedStock contenant un numéro de dossier (connu sous le nom de TPND) et une quantité. J'ai besoin de sélectionner une liste de stock de produit mais présente ceci avec le numéro de produit (connu sous le nom TPNB) plutôt que le numéro de cas. J'ai aussi une table ProductLookup qui contient tous les TPNB et TPND.SQL Joindre à une seule ligne - SQL Server 2005

AllocatedStock
identité AllocatedStockID
TPND int
Quantité int

ProductLookup
identité ProductLookupID
TPND int
TPNB int

Il y a un certain nombre de produc t types (TPNB) qui peuvent être fournis dans plus d'un type de cas (TPND). Ce résultat requis est le nombre total de chaque type de produit détenu, j'ai utilisé une fonction somme() comme suit:

select TPNB, sum(AllocatedQty) as 'QTY' 
from integration.ProductLookup as PL 
inner join dbo.AllocatedStock as AStock 
on PL.TPND = AStock.TPND 
group by TPNB 

Malheureusement, la table ProductLookup contient des lignes en double (données mauvaise historique qui ne peut pas être nettoyé) où une ligne contient les mêmes TPND et TPNB qu'une autre ligne. La seule chose que je dois joindre à la table ProductLookup est d'obtenir le TPNB pour le TPND que j'ai dans la table AllocatedStock. Est-il possible d'obtenir la jointure pour sélectionner uniquement le 1er match? Le problème que j'ai actuellement est que pour les TPND qui ont une ligne dupliquée dans la table ProductLookup, je récupère deux fois la valeur de la quantité.

vous serais reconnaissant pour toute aide,

Merci

Rob.

Répondre

2

Donnez ce un tourbillon. J'utilise une requête dérivée pour «nettoyer» votre table productlookup.

select TPNB, sum(AllocatedQty) as 'QTY' 
    from (select distinct TPND, TPNB from integration.ProductLookup) as PL 
    inner join dbo.AllocatedStock as AStock 
    on PL.TPND = AStock.TPND 
    group by TPNB 
+0

Bon sang, vous les gars sont vite sur ce point! – CResults

2

SELECT DISTINCT devrait le faire:

select TPNB, sum(AllocatedQty) as 'QTY' 
from (SELECT DISTINCT TPND, TPNB FROM integration.ProductLookup) as PL 
inner join dbo.AllocatedStock as AStock 
on PL.TPND = AStock.TPND 
group by TPNB 
+0

grands, merci beaucoup –

0
select distinct tpnb, qty 
from (
select TPNB, sum(AllocatedQty) as 'QTY' 
from integration.ProductLookup as PL 
inner join dbo.AllocatedStock as AStock 
on PL.TPND = AStock.TPND 
group by ProductLookupID) a 
0
select TPNB, sum(AllocatedQty) as 'QTY' 
from 
(
    SELECT TPND, TPNB 
    FROM ProductLookup 
    GROUP BY TPND, TPNB 
) as PL 
inner join dbo.AllocatedStock as AStock 
on PL.TPND = AStock.TPND 
group by TPNB