库存管理

时间:2013-01-08 11:51:56

标签: sql-server-2008

我有2个表,INWARDSOUTWARDS。我必须在每个日期显示每个不同股票的总内部和总向外以及该日期剩余的股票余额。我不需要在任何日期进行分组,我只想拥有库存中的库存总数。

我的查询编写如下:

SELECT
    I.Date as'Date',
    P.ResourceName as 'Item Name',
    P.ResourceRate as'Rate',
    i.Qty as Inwards Quantity',
    (   select qty
        from Outwards_master
        where I.Date=S.Date and I.Nameofitem =S.Nameofitem
    ) as 'Outwards Quantity',
    (   select (sum(i.qty)-sum(S.Qty))
        from Inwards_Master
            inner join Outwards_Master
            on i.Nameofitem=S.Nameofitem
    ) as 'Balance'
From Resource_Master P, Inwards_Master I, Outwards_Master S
WHERE (I.Nameofitem= P.ResourceName) and P.TenderCode = 1

此查询给了我一个错误。有什么问题?

错误是:

Msg 8120,Level 16,State 1,Line 1 列'Inwards_Master.Date'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

1 个答案:

答案 0 :(得分:0)

我根据你的查询猜测你想要这样的东西:

SELECT I.Date as Date, 
  P.ResourceName as ItemName,
  P.ResourceRate as Rate,
  i.Qty as InwardsQuantity,
  s.qty as OutwardsQuantity,
  i.qty-S.Qty as Balance,
  O.UnitSymbol As ItemUnit
FROM UnitMaster O
INNER JOIN Resource_Master P
  ON O.UnitCode = P.Unitcode
INNER JOIN Inwards_Master I
  ON I.Nameofitem= P.ResourceName
INNER JOIN Outwards_Master S 
  ON I.Date=S.Date 
  AND I.Nameofitem =S.Nameofitem
WHERE P.TenderCode=1

如果要显示所有项目,则可能需要使用LEFT JOIN

SELECT I.Date as Date, 
  P.ResourceName as ItemName,
  P.ResourceRate as Rate,
  i.Qty as InwardsQuantity,
  s.qty as OutwardsQuantity,
  i.qty-S.Qty as Balance,
  O.UnitSymbol As ItemUnit
FROM UnitMaster O
INNER JOIN Resource_Master P
  ON O.UnitCode = P.Unitcode
LEFT JOIN Inwards_Master I
  ON I.Nameofitem= P.ResourceName
LEFT JOIN Outwards_Master S 
  ON I.Date=S.Date 
  AND I.Nameofitem =S.Nameofitem
WHERE P.TenderCode=1

编辑#1,根据您的评论,我无法确定问题所在,但您可以尝试获取子查询中的总数量:

SELECT I.Date as Date, 
  P.ResourceName as ItemName,
  P.ResourceRate as Rate,
  i.TotalInQty as InwardsQuantity,
  s.TotalOutQty as OutwardsQuantity,
  i.TotalInQty-S.TotalOutQty as Balance,
  O.UnitSymbol As ItemUnit
FROM UnitMaster O
INNER JOIN Resource_Master P
  ON O.UnitCode = P.Unitcode
LEFT JOIN
(
  select sum(i.Qty) TotalInQty, Nameofitem
  from Inwards_Master I
  group by Nameofitem
) I
  ON I.Nameofitem= P.ResourceName
LEFT JOIN
(
  select sum(s.qty) TotalOutQty, Nameofitem
  from Outwards_Master S 
  group by s.Nameofitem
) S
  ON I.Date=S.Date 
  AND I.Nameofitem =S.Nameofitem
WHERE P.TenderCode=1