【问题标题】:How to use Count and Sum in the Same Query?如何在同一查询中使用 Count 和 Sum?
【发布时间】:2012-05-10 11:20:10
【问题描述】:

我使用聚合函数“SUM”编写了以下查询。

SELECT 
       D.PODetailID, 
       SUM(D.AcceptedQty) 
FROM STR_MRVDetail D 
INNER JOIN STR_MRVHeader H ON H.MRVID = D.MRVID 
INNER JOIN PUR_POHeader PH ON PH.POID = H.POID 
INNER JOIN PUR_PODetail PD ON PD.PODetailID = D.PODetailID
WHERE H.StatusID = 4
AND PH.POID = 839
AND (SELECT 
           SUM(AcceptedQty) 
     FROM 
           STR_MRVDetail 
     WHERE 
           STR_MRVDetail.PODetailID = PD.PODetailID) = 
                              (SELECT POQuantity FROM PUR_PODetail 
                               WHERE PUR_PODetail.PODetailID = PD.PODetailID)
                               GROUP BY D.PODetailID

目前此查询返回 2 行。我想检索此查询的计数。上述查询的行数如何计算?

【问题讨论】:

  • 所以您想将计数(在本例中为 2)作为单独的列?
  • 不,我不想展示。我只想计算行数并将行数分配给一个整数变量。
  • 你的编程语言应该有办法获取检索到的行数(或者只是在显示它们时计算它们)
  • 我需要获取检索到的行数
  • 执行查询后,返回的行数会在@@RowCount中得到。

标签: sql-server sql-server-2008 count sum aggregate


【解决方案1】:

您可以将@@ROWCOUNT 添加到查询中,这还会为您提供最终结果集以及结果集中所有行的计数。

SELECT D.PODetailID, SUM(D.AcceptedQty), @@ROWCOUNT FROM STR_MRVDetail D  
INNER JOIN STR_MRVHeader H ON H.MRVID = D.MRVID  
INNER JOIN PUR_POHeader PH ON PH.POID = H.POID  
INNER JOIN PUR_PODetail PD ON PD.PODetailID = D.PODetailID 
WHERE H.StatusID = 4 
AND PH.POID = 839 
AND (SELECT SUM(AcceptedQty) FROM STR_MRVDetail  
     WHERE STR_MRVDetail.PODetailID = PD.PODetailID) =  
     (SELECT POQuantity FROM PUR_PODetail  
      WHERE PUR_PODetail.PODetailID = PD.PODetailID) 
GROUP BY D.PODetailID 

【讨论】:

    【解决方案2】:
    SELECT COUNT(*) as Total_Rows
    FROM
    (
    SELECT D.PODetailID as PODetailID, SUM(D.AcceptedQty) as Total_AcceptedQty
    FROM STR_MRVDetail D 
    INNER JOIN STR_MRVHeader H ON H.MRVID = D.MRVID 
    INNER JOIN PUR_POHeader PH ON PH.POID = H.POID 
    INNER JOIN PUR_PODetail PD ON PD.PODetailID = D.PODetailID
    WHERE H.StatusID = 4
    AND PH.POID = 839
    AND (SELECT SUM(AcceptedQty) FROM STR_MRVDetail 
         WHERE STR_MRVDetail.PODetailID = PD.PODetailID) = 
         (SELECT POQuantity FROM PUR_PODetail 
          WHERE PUR_PODetail.PODetailID = PD.PODetailID)
    GROUP BY D.PODetailID
    ) as t
    

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多