【发布时间】:2017-01-31 10:36:25
【问题描述】:
我在表格中有Store_IDs 的总付款,需要针对transactions_ids 为各自的store_ids 结算/调整付款。
可以按如下方式创建表:
--- CREATE STORE_PAYMENTS TABLE--- CONTAINS RECEIVABLE AGAINST RECEIPTS NOS FOR STROES-------
CREATE TABLE DBO.STORE_PAYMENTS
(STORE_ID VARCHAR(10) NOT NULL,
RECEIPT_NO VARCHAR(10) NOT NULL,
RECEIVABLE INT NOT NULL,
PAYMENT_ADJUSTED INT NOT NULL,
BALANCE INT NOT NULL)
GO
INSERT INTO DBO.STORE_PAYMENTS
(STORE_ID,RECEIPT_NO,RECEIVABLE,PAYMENT_ADJUSTED,BALANCE)
VALUES
('STR1',1,100,0,0),
('STR1',2,200,0,0),
('STR1',3,300,0,0),
('STR2',1,100,0,0),
('STR2',2,100,0,0),
('STR2',3,50,0,0),
('STR3',1,0,0,0),
('STR3',2,150,0,0),
('STR3',3,300,0,0)
---- CREATE STORE_BALANCE TABLE --- CONTAINS INFORMATION OF IN HAND PAYMENTS -----------------
CREATE TABLE DBO.STORE_BALANCE
(STORE_ID VARCHAR(10) NOT NULL,
PAYMENTS INT NOT NULL)
GO
INSERT INTO DBO.STORE_BALANCE
(STORE_ID,PAYMENTS)
VALUES
('STR1',600),
('STR2',700),
('STR3',300)
SELECT * FROM DBO.STORE_BALANCE
SELECT * FROM DBO.STORE_PAYMENTS
调整支付的顺序可能是基于RECEIPT_NO order或rowid。
突出显示的列中的必需输出:
【问题讨论】:
-
将示例数据共享为 DDL + DML 很棒,但您还应该解释所需输出的逻辑,并展示您已经尝试过的内容。
-
为什么 str2 在 250 的账单上支付了 700?
-
亲爱的 Zohar,我尝试在 SQL 中应用会计中使用的 FIFO 方法,但这对于这个问题来说太复杂了。
-
STR1,STR2... 是分配给不同商店的 ID,这些商店可能在特定时间点之前累积付款。付款可能少于未付总额,也可能多于未付金额(针对多张发票)。有时,我们需要根据未付发票/收据调整付款。我们必须根据可用付款关闭尽可能多的收据。
标签: sql-server tsql balance