【问题标题】:Subtraction error in Select query选择查询中的减法错误
【发布时间】:2015-05-13 10:38:58
【问题描述】:

我有两个表,表 P 和表 Q,每个表有 10 行和 2 行。

当我使用以下代码从表 P 中减去(求数量)表 Q 时,减法会影响所有(10 行)行。减法将基于批号。

查看我使用的代码:

select p.batch,p.QTY-COALESCE(q.QTY,0) INSTOCK from 
(
select a.[ITEM CATEGORY NAME] cat,b.[ITM SUB CATEGORY NAME] subcat,c.[ITM BRAND DES] brand,d.[BTH NAME] batch,SUM(e.[INV QUANTITY]) QTY
from dbo.ITEM_CATEGORY a,dbo.ITM_SUB_CATEGORY b,dbo.ITM_BRAND_DES c,dbo.STK_BATC`enter code here`H d,dbo.INVENTORY_MASTER e
where 
a.[ITEM CATEGORY ID]=e.[INV CATEGORY] and
b.[ITM SUB CATEGORY ID]=e.[INV ITEM NAME ID] and
c.[ITM BRAND ID]=e.[INV ITEM BRAND ID] and
d.[BTH ID]=e.[INV BATCH ID] and
e.[INV PROCESS]='IN' 
group by a.[ITEM CATEGORY NAME],b.[ITM SUB CATEGORY NAME],c.[ITM BRAND DES],d.[BTH NAME],e.[INV BATCH ID]) AS p

CROSS APPLY

(select a.[ITEM CATEGORY NAME] cat,b.[ITM SUB CATEGORY NAME] subcat,c.[ITM BRAND DES] brand,d.[BTH NAME] batch,COALESCE(SUM(e.[INV QUANTITY]),0) QTY
from dbo.ITEM_CATEGORY a,dbo.ITM_SUB_CATEGORY b,dbo.ITM_BRAND_DES c,dbo.STK_BATCH d,dbo.INVENTORY_MASTER e
where 
a.[ITEM CATEGORY ID]=e.[INV CATEGORY] and
b.[ITM SUB CATEGORY ID]=e.[INV ITEM NAME ID] and
c.[ITM BRAND ID]=e.[INV ITEM BRAND ID] and
d.[BTH ID]=e.[INV BATCH ID] and
e.[INV PROCESS]='OUT' 
group by a.[ITEM CATEGORY NAME],b.[ITM SUB CATEGORY NAME],c.[ITM BRAND DES],d.[BTH NAME],e.[INV BATCH ID]) AS q 

我知道理解起来很复杂,但您会了解我是如何编码的。有没有最好的方法来从另一个表中减去一个表?

【问题讨论】:

  • 从表 P 中减去表 Q 到底是什么意思?
  • @ZoharPeled:选择包含p.QTY-COALESCE(q.QTY,0)
  • 检查批号的条件在哪里
  • 您能否展示一些示例数据和预期结果。
  • 亲爱的,感谢您的考虑,我可以通过以下给出的查询来解决问题..

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


【解决方案1】:

以下任何原因不起作用?

 select 
    p.batch, p.QTY INSTOCK 
from 
  (select 
        a.[ITEM CATEGORY NAME] cat,
        b.[ITM SUB CATEGORY NAME] subcat,
        c.[ITM BRAND DES] brand,
        d.[BTH NAME] batch,
        SUM(
          CASE 
            WHEN e.[INV PROCESS] = 'OUT' 
              THEN 
                 -e.[INV QUANTITY]
              ELSE
                e.[INV QUANTITY] 
            END) QTY
      from  dbo.INVENTORY_MASTER e
      join dbo.ITEM_CATEGORY a
         ON a.[ITEM CATEGORY ID]=e.[INV CATEGORY] 
      join dbo.ITM_SUB_CATEGORY b
         ON b.[ITM SUB CATEGORY ID]=e.[INV ITEM NAME ID] 
       join dbo.ITM_BRAND_DES c
           ON c.[ITM BRAND ID]=e.[INV ITEM BRAND ID]
       join dbo.STK_BATCH d
         ON d.[BTH ID]=e.[INV BATCH ID]
   where
       e.[INV PROCESS] IN ('IN','OUT')
         and
       e.[INV ITEM BRAND ID] = @EnterCodeHere
    group by 
       a.[ITEM CATEGORY NAME],
       b.[ITM SUB CATEGORY NAME],
       c.[ITM BRAND DES],
       d.[BTH NAME],
       e.[INV BATCH ID]) AS p

【讨论】:

  • 谢谢你的朋友,你太棒了..非常感谢你用你的绝妙想法节省了我的时间..!!
猜你喜欢
  • 2012-04-15
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
相关资源
最近更新 更多