2013-05-02 4 views
0

Schéma:dans les jointures de manipuler des données

Diagram of 4 tables combined

requête pour rejoindre:

SELECT DISTINCT c.CustomerID, c.FirstName , sh.DueDate, p.ProductID,p.ListPrice 
FROM SalesLT.Customer c 
    INNER JOIN SalesLT.SalesOrderHeader sh 
    ON c.CustomerID = sh.CustomerID 
    INNER JOIN SalesLT.SalesOrderDetail sd 
    ON sh.SalesOrderID = sd.SalesOrderID 
    INNER JOIN SalesLT.Product p 
    ON sd.ProductID = p.ProductID 
Order BY ListPrice Desc 

Sortie:

Output

le résultat souhaité:

enter image description here

Pour la sortie souhaitée:

  1. Quel pourrait être le ajouter à la requête existante?
  2. Quelle serait la manière optimisée de faire cette requête?
  3. Quelle serait la complexité temporelle et spatiale de la sous-requête et de la jointure?
+1

Avez-vous utilisé Over Clause avec la fonction Aggregate? Si non, vous voudrez peut-être le vérifier [ici] (http://msdn.microsoft.com/fr-fr/library/ms189461.aspx) –

+1

Pourriez-vous expliquer pourquoi les ID de produit dans la table de résultat souhaitée ont ces valeurs? C'est à dire. pourquoi 794, 795, 793 et ​​956? – Serg

+0

@Serg Merci de l'avoir signalé. Maintenant édité !! – vCillusion

Répondre

1

Je pense que vous voulez:

SELECT c.CustomerID 
    , c.FirstName 
    , sh.DueDate 
    , MAX(p.ProductID) ProductID 
    ,p.ListPrice 
    FROM SalesLT.Customer c 
     INNER JOIN SalesLT.SalesOrderHeader sh 
     ON c.CustomerID = sh.CustomerID 
     INNER JOIN SalesLT.SalesOrderDetail sd 
     ON sh.SalesOrderID = sd.SalesOrderID 
     INNER JOIN SalesLT.Product p 
     ON sd.ProductID = p.ProductID 
    GROUP BY 
    , c.FirstName 
    , sh.DueDate 
    , p.ListPrice 

Order BY ListPrice Desc 

Non pas que cela fait beaucoup de sens comme une requête, mais je suppose que vous vouliez savoir l'approche? Probablement vous avez une bonne réponse maintenant, mais cela nous encourage à mettre du temps dans une réponse si vous cochez une réponse appropriée, merci

Questions connexes