GROUP BY总订单数量

时间:2018-03-20 19:27:19

标签: sql-server count sum

我们试图让我们的表将第2列中的所有值(QtyComp - 基本上是 qtyorder * totalqty 的表达式列)加在一起,它们具有相同的ItemNo(第1列) 。

所以,我们目前得到以下内容:

ItemNo          QtyComp
7441            3
7441            1
7441            5

我们想要的是看到QTYComp列的SUM来给出这个结果:

ItemNo          QtyCom
7441            9

我们的代码如下;我已经加粗了我们需要它的部分来总结以下结果:

SELECT TOP (100) PERCENT ItemSpecs_2.itemno, 
                         workorderdetails.qtycomplete * 
                         ItemSpecFullStruc_2.totalqtyperroot AS QtyComp 
FROM   dbo.workorderdetails AS WorkOrderDetails 
       INNER JOIN dbo.itemspecfullstruc AS ItemSpecFullStruc_2 
               ON ItemSpecFullStruc_2.rootitemspecid = 
                  workorderdetails.itemspecid 
       INNER JOIN dbo.itemspecs AS ItemSpecs_2 
               ON ItemSpecs_2.itemspecid = ItemSpecFullStruc_2.childitemspecid 
       INNER JOIN dbo.workorder AS WorkOrder_1 
               ON WorkOrder_1.workorderid = workorderdetails.workorderid 
       LEFT OUTER JOIN dbo.tobescheduled_completed 
                    ON WorkOrder_1.workorderid = 
                       dbo.tobescheduled_completed.workorderid 
WHERE ( workorderdetails.completed = 1 ) 
      AND ( workorderdetails.compdate > Getdate() - 42 ) 
GROUP  BY ItemSpecs_2.itemno, 
          workorderdetails.qtyordered, 
          ItemSpecFullStruc_2.totalqtyperroot, 
          workorderdetails.[lineno], 
          workorderdetails.qtycomplete, 
          workorderdetails.compdate, 
          workorderdetails.qtycomplete * ItemSpecFullStruc_2.totalqtyperroot 

我们真的很感激一些想法!

谢谢, 崔西

2 个答案:

答案 0 :(得分:0)

假设您当前的代码为您提供了正确的计算,那么懒惰的答案就是将其写为CTE然后对其进行求和,但这可能会导致次优的表扫描 - 如果它只是临时的话就很好。

for s in frame.iterrows():
    if s[1][1] == "Wii":
        print (s[1][1]) ##As a test, I can print out the names of Wii games

答案 1 :(得分:0)

如果要对这些列求和,只需添加sum()语法,如下所示:

SELECT TOP (100) PERCENT ItemSpecs_2.itemno, 
                         sum(workorderdetails.qtycomplete * 
                         ItemSpecFullStruc_2.totalqtyperroot) AS QtyComp 
FROM   dbo.workorderdetails AS WorkOrderDetails 
       INNER JOIN dbo.itemspecfullstruc AS ItemSpecFullStruc_2 
               ON ItemSpecFullStruc_2.rootitemspecid = 
                  workorderdetails.itemspecid 
       INNER JOIN dbo.itemspecs AS ItemSpecs_2 
               ON ItemSpecs_2.itemspecid = ItemSpecFullStruc_2.childitemspecid 
       INNER JOIN dbo.workorder AS WorkOrder_1 
               ON WorkOrder_1.workorderid = workorderdetails.workorderid 
       LEFT OUTER JOIN dbo.tobescheduled_completed 
                    ON WorkOrder_1.workorderid = 
                       dbo.tobescheduled_completed.workorderid 
WHERE ( workorderdetails.completed = 1 ) 
      AND ( workorderdetails.compdate > Getdate() - 42 ) 
GROUP  BY ItemSpecs_2.itemno, 
          workorderdetails.qtyordered, 
          ItemSpecFullStruc_2.totalqtyperroot, 
          workorderdetails.[lineno], 
          workorderdetails.qtycomplete, 
          workorderdetails.compdate

此外,您需要通过该列从组中删除。

要获得所需的结果,请仅通过ItemSpecs_2.itemno设置GROUP BY