Sql server 期末差异
我正在使用一个数据库,该数据库有一个表,其中列出了每个期末支付的所有款项。我必须计算出本月付款与上一期末的差异。我已经写了一个SQL查询,但是它看起来很脏,而且看起来不是最好的方式Sql server 期末差异,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在使用一个数据库,该数据库有一个表,其中列出了每个期末支付的所有款项。我必须计算出本月付款与上一期末的差异。我已经写了一个SQL查询,但是它看起来很脏,而且看起来不是最好的方式 ((SELECT payment FROM paytable py1 WHERE py1.pay_id = pn.pay_id AND period_id = '201310') - ((SELECT payment FROM paytable py2 WHERE py2.pay_id = pn.pay_i
((SELECT payment FROM paytable py1 WHERE py1.pay_id = pn.pay_id AND period_id = '201310')
-
((SELECT payment FROM paytable py2 WHERE py2.pay_id = pn.pay_id AND (period_id = '201310' - 1)))) as 'Payment Variance',
有很多这样的计算要做。做这件事最好的方法是什么?这有帮助吗?基本上以句点1将同一个表连接到它自己
SELECT py1.period_id, py1.payment - py2.payment as 'Payment Variance'
FROM paytable py1
INNER JOIN paytable py2
ON py2.pay_id = py1.pay_id
AND py2.period_id = CAST(CAST(py1.period_id as int) -1 as varchar(10))
WHERE py1.pay_id = pn.pay_id
可惜你用的是2008。如果你能切换到2012年,有一个新的
LAG
功能可以轻松解决你的问题:哪种方式最好?因为这个查询必须有多个内部联接。您还没有显示完整的查询(即“pn”别名表所在的位置),所以无法提供更多帮助。我所展示的内容将得到每个周期id,并给出n和n-1之间的方差(其中n是周期id)。谢谢您,在尝试之后,它如我所期望的那样工作。非常感谢。