视图中的SQL计数为列

视图中的SQL计数为列,sql,sql-server,sql-server-2005,view,count,Sql,Sql Server,Sql Server 2005,View,Count,我试图在视图中将计数的结果作为列获取。 请参阅下面的查询,了解我想要的东西的演示(这只是为了演示) 这显然不起作用。。。但我想知道这样做的正确方法是什么 我正在使用SQL Server,请尝试以下操作: SELECT ProductID, Name, Description, Price, count(*) as totalnumberoforders FROM tblProducts prod LEFT JOIN tblOrders ord

我试图在视图中将计数的结果作为列获取。 请参阅下面的查询,了解我想要的东西的演示(这只是为了演示)

这显然不起作用。。。但我想知道这样做的正确方法是什么

我正在使用SQL Server,请尝试以下操作:

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

如果您删除了联接,则查询实际上会起作用-它没有实际使用,并且会导致中的ord表与您已联接到的ord表冲突:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    (SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders
FROM tblProducts prod
或者,您可以结合使用联接表:


如果您只对已订购的产品感兴趣,您可以简单地用内部联接替换左侧外部联接操作:

SELECT 
    prod.ProductID, 
    prod.Name, 
    prod.Description, 
    prod. Price, 
    COUNT(*) AS TotalNumberOfOrders
FROM tblProducts prod
INNER JOIN tblOrders ord ON prod.ProductID = ord.ProductID
这将有助于:

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
“COUNT(ord.ProductId)”子句确保如果没有找到订单,TotalNumberOfOrders将等于零

[稍后编辑:我忘记了GROUPBY子句。Doh!]

SELECT 
    prod.ProductID, 
    prod.Name, 
    prod.Description, 
    prod. Price, 
    COUNT(*) AS TotalNumberOfOrders
FROM tblProducts prod
INNER JOIN tblOrders ord ON prod.ProductID = ord.ProductID
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