2010-03-27 5 views
6

Ich versuche, das Ergebnis eines COUNT als Spalte in meiner Ansicht zu erhalten. Bitte beachten Sie die unten Abfrage für eine Demo von der Art, was ich will (das ist nur zu Demonstrationszwecken)SQL-Count in Ansicht als Spalte

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    (SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders 

FROM tblProducts prod 
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID 

offensichtlich nicht das funktioniert ... aber ich frage mich, was die richtige Art und Weise zu tun, das wäre?

Ich bin mit SQL Server

Antwort

7

Ihre Anfrage würde tatsächlich funktionieren, wenn Sie die Verknüpfung entfernt - es ist nicht wirklich verwendet wird, und es wird die ord Tabelle innerhalb des inner select subquery bewirken Konflikt mit der ord Tabelle, die Sie beigetreten sind: Alternativ

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    (SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders 
FROM tblProducts prod 

, können Sie tatsächlich Nutzung der verknüpften Tabelle in Verbindung machen mit Group By:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    COUNT(ord.ProductID) AS TotalNumberOfOrders 
FROM tblProducts prod 
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID 
GROUP BY 
    ProductID, 
    Name, 
    Description, 
    Price 
4

Versuchen Sie folgendes:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
count(*) as totalnumberoforders 
FROM tblProducts prod 
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID 
group by 
    ProductID, 
    Name, 
    Description, 
    Price 
1

Wenn Sie daran interessiert sind nur in den Produkten sind, die bestellt wurden, können Sie einfach die LEFT OUTER JOIN-Operation mit einem INNER JOIN ersetzen könnte:

SELECT 
    prod.ProductID, 
    prod.Name, 
    prod.Description, 
    prod. Price, 
    COUNT(*) AS TotalNumberOfOrders 
FROM tblProducts prod 
INNER JOIN tblOrders ord ON prod.ProductID = ord.ProductID 
0

Dies funktioniert:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    COUNT(ord.ProductId) AS TotalNumberOfOrders 
FROM tblProducts prod 
LEFT JOIN tblOrders ord 
ON prod.ProductID = ord.ProductID 
GROUP BY 
    ProductID, 
    Name, 
    Description, 
    Price 

Die Klausel "COUNT (ord.ProductId)" stellt sicher, dass TotalNumberOfOrders gleich null ist, wenn keine Aufträge gefunden werden.

[Spätere Bearbeitung: Ich habe die GROUP BY-Klausel vergessen. Doh!]

Verwandte Themen