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的建议。
第二张表
答案 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上述查询结果的屏幕截图
OrderDetails表中的列数据类型