Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 期末差异_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 期末差异

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

我正在使用一个数据库,该数据库有一个表,其中列出了每个期末支付的所有款项。我必须计算出本月付款与上一期末的差异。我已经写了一个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_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)。谢谢您,在尝试之后,它如我所期望的那样工作。非常感谢。