2009-03-10 12 views
0

Je l'instruction SQL suivante:tsql: comment rejoindre cette table?

SELECT TOP (100) PERCENT inv.CompanyID, 
         cust.CustID AS ClientID, 
         cust.CustName AS CustomerName, 
         inv.InvcKey, inv.PrimarySperKey AS SperKey, 
         inv.TranID AS InvoiceNumber, 
         inv.TranDate AS PostDate, 
         sper.SperName AS SalesPersonName, 
         inv.SalesAmt AS InvoiceSubAmount, 
         inv.TranAmt AS InvoiceTotal, 
         detl.ItemKey, 
         detl.InvoiceLineKey AS dtInvoiceLineKey, 
         detl.Description, 
         detl.UnitCost AS calcUnitCost, 
         detl.UnitPrice, 
         detl.ExtAmt, 
         (detl.UnitPrice - detl.UnitCost) * dist.QtyShipped - detl.TradeDiscAmt AS detLineGrossProfit, 
         dbo.tPA00175.chrJobNumber AS ARJobNumber, 
         dist.QtyShipped, 
         dbo.timItem.ItemID AS ARItemID, 
         dbo.timItemClass.ItemClassID AS ARItemClass,   
         dist.TradeDiscAmt,      
         dbo._v_GP_SalesTerr.SalesTerritoryID 

FROM   
         dbo.tarInvoiceDetl AS detl RIGHT OUTER JOIN 
         dbo.timItem INNER JOIN 
         dbo.timItemClass ON dbo.timItem.ItemClassKey = dbo.timItemClass.ItemClassKey ON detl.ItemKey = dbo.timItem.ItemKey RIGHT OUTER JOIN 
         dbo._v_GP_SalesTerr RIGHT OUTER JOIN 
         dbo.tarInvoice AS inv INNER JOIN 
         dbo.tarCustomer AS cust ON inv.CustKey = cust.CustKey ON dbo._v_GP_SalesTerr.CustKey = cust.CustKey ON 
         detl.InvcKey = inv.InvcKey LEFT OUTER JOIN 
         dbo.tPA00175 INNER JOIN 
         dbo.paarInvcHdr ON dbo.tPA00175.intJobKey = dbo.paarInvcHdr.intJobKey ON inv.InvcKey = dbo.paarInvcHdr.InvcKey LEFT OUTER JOIN 
         dbo.tarInvoiceLineDist AS dist ON detl.InvoiceLineKey = dist.InvoiceLineKey LEFT OUTER JOIN 
         dbo.tarSalesperson AS sper ON inv.PrimarySperKey = sper.SperKey 

Si je voulais ajouter un champ appelé Inventory.LastUnitCost où l'inventaire avait une clé de substitution appelée ItemKey pour la table « timitem », comment pourrais-je ajouter ceci là où il chercherait simplement le champ LastUnitCost par itemkey? S'il n'y avait pas un LastUnitCost correspondant à la table timitem, il serait juste null.

Chaque fois que je tente de l'ajouter comme dans Inner Join à timItem sur Inventory.itemkey = timItem.itemkey, il affecte le timItemClass. Champ ItemClassID où certains des catorgies n'apparaissent plus.

merci d'avance.

Répondre

2

Ajouter Inventory.LastUnitCost à la SELECT liste

et ajoutez cette ligne à la fin de la requête:

dbo.Inventory LEFT OUTER JOIN dbo.timItem ON dbo.timItem.itemkey = dbo.Inventory.itemkey 
+0

Vous pouvez également utiliser ISNULL ou COALESCE avec l'élément sélectionné pour obtenir une valeur par défaut de Saner, puisque laisser des zéros peut faire ... bizarre ... code client parfois. –

+0

Bon point Joel. –

+0

n'avez-vous pas besoin d'une sorte de jointure pour le lier dans la requête? – phill

Questions connexes