我在SQL中有以下表

时间:2017-11-03 13:19:38

标签: sql sql-server sql-server-2008

Adviceid      Detailid    Orderid    Itemid    Qty

   19140         76841      73036      6194    400.000
   19140         76842      73037       437    500.000
   19140         76843      73038      6194    550.000
   19140         76844          0      6194    100.000
   19141         76845      10001      6194    100.000
   19141         76846      10002      6100    050.000
   19141         76847      10004      6194    050.000
   19142         76848      10006      6100    050.000
   19142         76848      10006      6100    050.000

   19143         76849          0      6101    010.000
   19143         76850          0      6102    005.000
   19143         76851      10007      6101    050.000
   19143         76852      10008      6104    050.000
   19143         76853      10009      6102    050.000
   19143         76854          0      6102    001.000
   19144         76855      25001      6101    050.000
   19144         76856      25001      6102    050.000
   19144         76857          0      6103    050.000

我想使用SQL Query跟踪输出。

Adviceid      Detailid    Orderid    Itemid    Qty        AdditionQty

   19140         76841      73036      6194    400.000    100.000
   19140         76842      73037       437    500.000    NULL
   19140         76843      73038      6194    550.000    NULL
   19140         76844          0      6194    100.000    NULL
   19141         76845      10001      6194    100.000    NULL
   19141         76846      10002      6100    050.000    NULL
   19141         76847      10004      6194    050.000    NULL
   19142         76848      10006      6100    100.000    NULL


   19143         76849          0      6101    010.000    NULL
   19143         76850          0      6102    005.000    NULL
   19143         76851      10007      6101    050.000    010.000
   19143         76852      10008      6104    050.000    NULL
   19143         76853      10009      6102    050.000    006.000
   19143         76854          0      6102    001.000    NULL
   19144         76855      25001      6101    050.000    NULL
   19144         76856      25001      6102    050.000    NULL
   19144         76857          0      6103    050.000    NULL

我希望根据Adviceid添加数量,Itemid包含orderid'O',例如Order id = 73036,以及qty的总和,如果是相同的顺序和使用SQL的建议。

第二张表

2 个答案:

答案 0 :(得分:0)

我无法弄清楚为什么你会想要这么具体的东西,但这肯定会给你输出:

SELECT t1.*, t2.qty as additionqty
FROM table t1
    LEFT OUTER JOIN (SELECT adviceid, itemid FROM table WHERE orderid = 0) t2
       ON t1.adviceid = t2.adviceid 
          AND t1.itemid = t2.itemid
          AND t1.orderid = 73036

如果这应该影响具有相同的adviceid和itemid的任何订单,那么删除ON子句上的最后一个条件...这将使整个事情变得更有意义......但是你想要的结果是你想要的结果

答案 1 :(得分:0)

尝试以下方法。它完全按照您的要求工作。我已在SSMS中验证过它。在查询之后,还会在此处粘贴我所获得的屏幕截图。

这实际上是一个非常复杂的场景,但无论您的数据是什么,下面的查询都将始终有效。我已将您在问题中提供的表命名为OrderDetails。

<强>查询

SELECT
    t.AdviceId
    ,t.DetailId
    ,t.OrderId
    ,t.ItemId
    ,SUM(t.Qty) AS Qty
    ,CASE
        WHEN MIN(t.DetailId) = (SELECT
                    MIN(a.DetailId)
                FROM OrderDetails a
                WHERE t.OrderId <> 0
                AND a.OrderId <> 0
                AND a.AdviceId = t.AdviceId
                AND a.ItemId = t.ItemId) THEN (SELECT 
                    SUM(x.Qty)
                FROM OrderDetails x
                WHERE x.AdviceId = t.AdviceId
                AND x.ItemId = t.ItemId
                AND x.OrderId = 0)
        ELSE NULL
    END AS AdditionQty
FROM OrderDetails t
GROUP BY    t.AdviceId
            ,t.DetailId
            ,t.OrderId
            ,t.ItemId
ORDER BY t.AdviceId,
t.DetailId,
t.OrderId,
t.ItemId;

SSMS上述查询结果的屏幕截图

SSMS results of query

OrderDetails表中的列数据类型

Data Types of Columns in Table