【问题标题】:SQL Count in View as column以列形式查看的 SQL 计数
【发布时间】:2011-02-01 12:53:27
【问题描述】:

我正在尝试将 COUNT 的结果作为我的视图中的一列。 请参阅下面的查询以获取我想要的那种东西的演示(这仅用于演示目的)

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

这显然行不通……但我想知道正确的做法是什么?

我正在使用 SQL Server

【问题讨论】:

    标签: sql sql-server sql-server-2005 view count


    【解决方案1】:

    这将起作用:

    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 将等于零。

    [稍后编辑:我忘记了 GROUP BY 子句。呸!]

    【讨论】:

      【解决方案2】:

      试试这个:

      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
      

      【讨论】:

        【解决方案3】:

        如果您只对已订购的产品感兴趣,您可以简单地将 LEFT OUTER JOIN 操作替换为 INNER JOIN:

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

        【讨论】:

          【解决方案4】:

          如果您删除了连接,您的查询实际上会起作用 - 它实际上并没有被使用,它会导致 inner select subquery 中的 ord 表与您加入的 ord 表发生冲突:

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

          或者,您实际上可以将连接表与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
          

          【讨论】:

            猜你喜欢
            • 2021-06-05
            • 2017-02-22
            • 1970-01-01
            • 1970-01-01
            • 2011-04-24
            • 1970-01-01
            • 1970-01-01
            • 2015-01-27
            • 1970-01-01
            相关资源
            最近更新 更多