【问题标题】:Inventory Balance stock display库存余额库存显示
【发布时间】:2013-04-11 04:03:48
【问题描述】:

我遇到了一个小问题,我必须通过查询显示库存中的项目显示。我正在从 4 个表中检索数据,并希望显示类似于下面的输出。 SQL fiddle 中给出了表结构和示例值。这是一个SQL Fiddle for the table structures an values.

我想要的输出是这样的。

Date                    ItemName        Rate     InQty  OutQty  Balance ItemUnit
2013-01-04 00:00:00.000 Sand            0.000    10    5        5       NONE
2013-01-04 00:00:00.000 Backhoe Loader  650.000  20    2        18      Hr
2013-01-04 00:00:00.000 Tractor Troley  150.000  10    0        10      Hr

2013-02-04 00:00:00.000 Sand            0.000    0     5        0       NONE
2013-02-04 00:00:00.000 Backhoe Loader  650.000  5     2        21      Hr
2013-02-04 00:00:00.000 Tractor Troley  150.000  10    30       -10     Hr
.
.
.

我已经花了一个多月的时间来做这件事。任何机构都可以帮助我吗?

【问题讨论】:

  • 究竟是什么这里的问题?!?!?!?
  • 问题是我想要上面显示的示例输出,我已经在 sql fiddle 链接sqlfiddle.com/#!3/f977e/1/0 中编写了查询和表结构,你能帮帮我吗?我正在编辑我的问题
  • 你能解释一下你想要的输出背后的逻辑吗?
  • 逻辑是我想查看每个日期的 IN、OUT 和 BALANCE 项目,为此我必须从 4 个表中检索数据。你能帮我建立查询吗?

标签: sql-server-2008 tsql inventory


【解决方案1】:

可能是这样的: http://sqlfiddle.com/#!3/f977e/50

从日期中删除了MIN(),因为它限制了数据。添加了dateadd-datediff 以确保删除日期的所有时间。 如您所见,我评论了where 子句。但是你当然可以再次添加它。

希望这会有所帮助。

编辑:

添加总计。

http://sqlfiddle.com/#!3/f977e/75

【讨论】:

  • 是的,这几乎是我想要的,但是如果我们可以再添加 1 列作为总余额,这可以将总余额显示为我们的库存示例余额中可用的总金额,那就太好了1-1-13+1-2-13的余额=总余额,见问题中的余额栏。
  • 哦,非常感谢,这是最完美的解决方案。非常感谢
【解决方案2】:

试试这个Query:

SELECT 
DISTINCT
CONVERT(DATETIME,CONVERT(DATE,I.[Date]),101) AS [Date],
I.Nameofitem AS ItemName,
I.Rate AS RATE,
I.Qty AS InQty,
ISNULL(O.Qty,0) AS OutQty,
ISNULL(I.Qty,0)-ISNULL(O.Qty,0) AS Balance,
O.unit AS ItemUnit
FROM Outwards_Master O
RIGHT JOIN Inwards_Master I ON O.Nameofitem=I.Nameofitem
                                AND CONVERT(DATE,O.[Date])=CONVERT(DATE,I.[Date])

SQL Fiddle

注意:这不会产生精确的输出,因为数据延迟。

编辑:

假设(我认为您的结构中有)

1.Inward MasterOutward Master中的所有Date都是相同副-versa AND 日期 IS PRIMARY KEY

2.每个日期

都有InwardOutward Quantity Column

有了上面的假设,这里是SQL Query

1.TEMP表

SELECT 
DENSE_RANK() over(order by I.Date) AS [RANK],
ROW_NUMBER()over(partition by I.Date order by I.Date) AS [VersionId],
I.Date,
I.Nameofitem,
I.Rate,
ISNULL(I.Qty,0) AS INQTY,
ISNULL(O.Qty,0) AS OUTQTY,
I.unit
INTO #TEMP1
FROM 
#Inwards_Master I
INNER JOIN #Outwards_Master O ON CONVERT(DATE,O.[Date])=CONVERT(DATE,I.[Date])
            AND I.Nameofitem=O.Nameofitem

SELECT * FROM #TEMP1 ORDER BY Date,Nameofitem

2.平衡:

;WITH x AS
(
    SELECT 
        [Rank],
        [VersionId],
        Nameofitem,
        [Date],
        INQTY,
        OUTQTY,
        bal=(INQTY-OUTQTY)
    FROM #temp1
    WHERE [Rank] = 1
    UNION ALL
    SELECT 
        y.[Rank],
        y.[VersionId],
        y.Nameofitem,
        y.[Date],
        y.INQTY,
        y.OUTQTY,
        x.bal+(y.INQTY-y.OUTQTY)
    FROM x INNER JOIN #temp1 AS y
    ON y.[Rank] = x.[Rank] + 1
    AND y.VersionId=x.VersionId
    and y.Nameofitem=x.Nameofitem
)
SELECT 
    [Date],
    Nameofitem,
    INQTY,
    OUTQTY,
    Balance = bal
FROM x
ORDER BY Date,Nameofitem
OPTION (MAXRECURSION 10000);

Here is the SQL Fiddle to verify

【讨论】:

  • 谢谢,但我也希望将前一天的余额添加到今天并显示总余额,即最后显示的余额必须显示所有 IN、OUT 之后的总余额前几天,还有 1 件事我有不同的标书,但我只想查看所需标书的数据而不是全部,你能建议任何改变吗?
  • 我刚来。让我看看我能不能做到。
  • 再次感谢你,我很高兴能解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2017-03-25
  • 2019-05-13
  • 2019-12-19
  • 1970-01-01
  • 2011-07-11
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多