Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建库存分类账查询_Sql_Sql Server - Fatal编程技术网

Sql 创建库存分类账查询

Sql 创建库存分类账查询,sql,sql-server,Sql,Sql Server,我想从此表创建股票分类账 我想得到这样的结果。 假设您希望每个仓库中的每个产品都有一个运行平衡,这应该让您开始了解如何实现您想要的。如果您需要以不同的方式对产品和仓库进行聚合,我将留给您来解决 这里的关键部分是在over窗口函数子句中使用orderby。这样做的目的是以InvoiceDate顺序对当前on之前的所有行进行求和: declare @t table(InvoiceDate date,InvoiceNo nvarchar(20),ProductId int,WareHouseId

我想从此表创建股票分类账

我想得到这样的结果。

假设您希望每个仓库中的每个产品都有一个运行平衡,这应该让您开始了解如何实现您想要的。如果您需要以不同的方式对产品和仓库进行聚合,我将留给您来解决


这里的关键部分是在
over
窗口函数子句中使用
orderby
。这样做的目的是以
InvoiceDate
顺序对当前on之前的所有行进行求和:

declare @t table(InvoiceDate date,InvoiceNo nvarchar(20),ProductId int,WareHouseId int,StockIn int, StockOut int);
insert into @t values('20180211','11218',2,2,100,0),('20180301','march18',1002,2,30,0),('20180701','july2018',1003,2,50,0),('20180701','july2018',1002,2,100,0),('20180301','SI-00001',1002,2,0,20),('20180301','SI-00002',1002,2,0,5),('20180317','20180317',1003,3009,50,0),('20180317','20180317',1010,3009,30,0),('20180317','20180317',1012,3009,25,0),('20180301','SI-18-03-1',1002,3009,0,20),('20180301','ST-18-03-01',1003,3009,50,0);

select t.WareHouseId
    ,t.InvoiceNo
    ,t.ProductId
    ,t.StockIn
    ,t.StockOut
    ,sum(t.StockIn) over (partition by t.WareHouseID, t.ProductId order by t.InvoiceDate, t.InvoiceNo)
    -sum(t.StockOut) over (partition by t.WareHouseID, t.ProductId order by t.InvoiceDate, t.InvoiceNo) as Balance
from @t as t
order by t.WareHouseId
        ,t.ProductId
        ,t.InvoiceDate
        ,t.InvoiceNo;
输出:

+-------------+-------------+-----------+---------+----------+---------+
| WareHouseId |  InvoiceNo  | ProductId | StockIn | StockOut | Balance |
+-------------+-------------+-----------+---------+----------+---------+
|           2 | 11218       |         2 |     100 |        0 |     100 |
|           2 | march18     |      1002 |      30 |        0 |      30 |
|           2 | SI-00001    |      1002 |       0 |       20 |      10 |
|           2 | SI-00002    |      1002 |       0 |        5 |       5 |
|           2 | july2018    |      1002 |     100 |        0 |     105 |
|           2 | july2018    |      1003 |      50 |        0 |      50 |
|        3009 | SI-18-03-1  |      1002 |       0 |       20 |     -20 |
|        3009 | ST-18-03-01 |      1003 |      50 |        0 |      50 |
|        3009 | 20180317    |      1003 |      50 |        0 |     100 |
|        3009 | 20180317    |      1010 |      30 |        0 |      30 |
|        3009 | 20180317    |      1012 |      25 |        0 |      25 |
+-------------+-------------+-----------+---------+----------+---------+

到目前为止你试过什么?图片对样本数据没有帮助。使用示例数据和预期结果添加实际表结构。这将更加清晰。您如何从源表中知道
库存日期
是什么?库存日期已经在源表中,而不是您在问题中包含的库存日期。请确保所有相关信息都在您的问题中。我们无法访问您的数据库。