我想获取一个仓单中的每个商品的:预期数量、实际数量、剩余数量,并且剩余数量大于零使用以下语句,报错:[Microsoft][ODBC SQL Server Driver][SQL Server]列名 'sumQty1' 无效。 
SELECT CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, (sumQty1 - sumQty2) AS sumQty3
FROM OWsT_Order_Item
WHERE OrderID = 'P101201001' AND sumQty3 > 0
GROUP BY CmdyID改成以下语句才可以,但我又不会判断剩余数量大于零
SELECT CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, (SUM(QtyExpect) - SUM(QtyActual)) AS sumQty3
FROM OWsT_Order_Item
GROUP BY CmdyID并且,最重要的是,以上只是简单的示例,实际使用时:预期数量 和 实际数量,也是通过大量SQL语句从不同的表计算出来的,因此就算使用第二种修改后方法,也会SQL语句太长、太乱、效率低下。请问有没有简洁的方法,存储过程也可以,谢谢!

解决方案 »

  1.   


    SELECT 
    CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, 
    (sumQty1 - sumQty2) AS sumQty3
    FROM OWsT_Order_Item
    WHERE OrderID = 'P101201001' AND sumQty3 > 0
    GROUP BY CmdyID--这个报错是因为sumQty1,sumQty2是你在当前层次的别名,嵌套后方可使用。
      

  2.   

    SELECT CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, (sumQty1 - sumQty2) AS sumQty3
    FROM OWsT_Order_Item
    WHERE OrderID = 'P101201001' AND sumQty1 - sumQty2 > 0
    GROUP BY CmdyID
      

  3.   


    不想嵌套,就这样:SELECT 
    CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, 
    SUM(QtyExpect) - SUM(QtyActual) AS sumQty3
    FROM OWsT_Order_Item
    WHERE 
    OrderID = 'P101201001' AND 
    SUM(QtyExpect) - SUM(QtyActual) > 0
    GROUP BY CmdyID
      

  4.   

    SELECT CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, sum(QtyExpect - QtyActual) AS sumQty3
    FROM OWsT_Order_Item
    GROUP BY CmdyID
    having sum(QtyExpect - QtyActual)>0
      

  5.   

    各位老大,有没有好的方法,实际使用时SQL语句太长了。能不能用存储过程把SUM出来的数据放入变量,然后再组装到SQL语句中?
      

  6.   

    SELECT CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, sum(QtyExpect - QtyActual) AS sumQty3
    FROM OWsT_Order_Item
    GROUP BY CmdyID
    having sum(QtyExpect - QtyActual)>0语句已经和存储差不多了
      

  7.   

    select t.CmdyID,t.sumQty1,t.sumQty2,t.sumQty3
    from
    (
    SELECT CmdyID, SUM(QtyExpect) AS sumQty1, SUM(QtyActual) AS sumQty2, (sumQty1 - sumQty2) AS sumQty3
    FROM OWsT_Order_Item
    WHERE OrderID = 'P101201001' 
    GROUP BY CmdyID) t
    where t.sumQty3>0