2012-05-10 103 views
0

我已经使用聚合函数“SUM”编写了以下查询。如何在同一个查询中使用Count和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行。我想检索此查询的计数。如何计算上述查询的行数?

+0

所以,你想获得计数(2在这种情况下)作为一个单独的列? –

+0

不,我不想展示。我只想对行进行计数并将行计数分配给一个整数变量。 – thevan

+1

您的编程语言应该有获取检索行数的手段(或者只是在显示它们时对它们进行计数) –

回答

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 
+0

谢谢你adbul。它的工作.. – thevan

2

您可以添加@@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 
相关问题