2010-06-30 7 views
3

Pourquoi cette requête ne fonctionne-t-elle pas?La requête Sql Server ne fonctionne pas en tant que sous-requête

Select temp.CompanyName from 

(
    SELECT c.CompanyName, o.OrderID, 
      YEAR(o.OrderDate) As YEAR, 
      Sum(od.UnitPrice * od.Quantity) from Orders o 
     INNER JOIN [Order Details] od 
      ON o.OrderID = od.OrderID 
     INNER JOIN Customers c 
      On c.CustomerID = o.CustomerID 
       GROUP BY o.OrderId,c.CompanyName, YEAR(o.OrderDate) 

) As temp; 

Il utilise la base de données Northwind. Si je l'exécute sans créer de vue temporaire, c'est-à-dire si j'exécute la requête contenue entre parenthèses, cela fonctionne très bien.

Répondre

5

au premier coup d'oeil, je dirais parce que votre somme() ne dispose pas d'un alias de colonne

+0

Very Nice. Tu as raison. Mais quel problème pourrait être causé simplement en n'utilisant pas l'alias de colonne? Si je l'exécute sans créer de vues, cela fonctionne très bien. – TCM

+1

Tout d'abord, cela s'appelle une sous-requête, pas une vue. Ensuite, demandez-vous comment vous pouvez vous référer à une colonne sans nom dans la requête parente, et je pense que vous comprendrez pourquoi c'est une erreur. –

+0

Oh merci j'ai pensé que c'est vue, puisque nous sommes sélectionner quelque chose, puis en sélectionnant à nouveau quelque chose. – TCM

1

essayez ceci:

Select CompanyName from 
(
    SELECT c.CompanyName, o.OrderID, 
      YEAR(o.OrderDate) As YEAR, 
      Sum(od.UnitPrice * od.Quantity) as price from Orders o 
     INNER JOIN [Order Details] od 
      ON o.OrderID = od.OrderID 
     INNER JOIN Customers c 
      On c.CustomerID = o.CustomerID 
       GROUP BY o.OrderId,c.CompanyName, YEAR(o.OrderDate) 

) temp 
Questions connexes