价值分配

时间:2016-01-12 10:00:02

标签: sql sql-server

有人可以帮我解决以下问题吗?

我有2个表连接在一起,一个是发票标题,其中包含发票未结清的金额,另一个是包含原始金额分析的发票行。我需要根据个别原始金额分配未付金额,以便总金额是未偿还金额的总和。

我开始使用的代码是:

SELECT  

  t1.TRANSACTION_REFERENCE
  ,[LINE_NUMBER]
  ,[LINE_SEQUENCE_NUMBER]
  ,t2.OUTSTANDING_AMOUNT
  ,[NET_AMOUNT]
  ,[VAT_AMOUNT]

  FROM I_DB_TRANSACTION_DETAIL_FACT t1

INNER JOIN I_DB_TRANSACTION_HEADER t2 on t1.TRANSACTION_REFERENCE =     
t2.TRANSACTION_REFERENCE

我得到的结果是:

enter image description here

未结金额列需要在前4行显示零,然后分别在第5行和第6行显示£2351.17和£131.44。

编辑:

这是标题表中保存的数据

TRANSACTION_REFERENCE OUTSTANDING_AMOUNT

IN0110468843 2482.61

编辑2:

我使用了修改后的代码并返回错误:

(
select sum(net_amount) originalamount from I_DB_TRANSACTION_DETAIL_FACT
)
select *,case when NET_AMOUNT =0 then 0 else
NET_AMOUNT/(fn.ORIGINAL_AMOUNT * fn.OUTSTANDING_AMOUNT) end     
newoutstandingamount
from
I_DB_TRANSACTION_DETAIL_FACT T
cross apply (select * from I_DB_TRANSACTION_HEADER)fn

错误是:

警告:聚合或其他SET操作消除了空值。

(1行(s)受影响) Msg 8134,Level 16,State 1,Line 4 除以遇到的零错误。

1 个答案:

答案 0 :(得分:0)

这很容易,但你应该抛出一些样本数据。 试试你自己,

;with CTE as
(
select sum(net_amount) originalamount from table1
)
select *,case when netamount =0 then 0 else
netamount/(fn.originalamount *outstandingamount) end newoutstandingamount
 from
table1 T
cross apply (select * from CTE)fn

在自己的查询中放了这个。