【FastReport教程】每個(gè)T-SQL程序員應(yīng)該知道的窗口函數(shù)——第1部分
很久以前,Microsoft SQL Server 2005窗口函數(shù)中出現(xiàn)了一個(gè)有趣的功能。這些函數(shù)允許您在Select子句中的給定行范圍內(nèi)執(zhí)行計(jì)算。對(duì)于那些沒有遇到過這些功能的人來說,問題出現(xiàn)了 - “Window是什么意思?”。窗口表示在其中執(zhí)行計(jì)算的行集。窗口功能允許您將整個(gè)數(shù)據(jù)集分成這樣的窗口。
當(dāng)然,沒有它們,所有窗口函數(shù)都可以做到。但是,窗口函數(shù)與常規(guī)聚合函數(shù)相比具有很大的優(yōu)勢(shì):無需對(duì)數(shù)據(jù)集進(jìn)行分組以進(jìn)行計(jì)算,這允許您使用其唯一標(biāo)識(shí)符保存集合中的所有行。同時(shí),窗函數(shù)的工作結(jié)果只是作為另一個(gè)字段添加到結(jié)果樣本中。 使用窗口函數(shù)而不是常規(guī)聚合函數(shù)的主要優(yōu)點(diǎn)如下:窗口函數(shù)不會(huì)將行分組為一行輸出,?R (ORDER BY ChildContractId) AS [SUM] FROM dbo.Pays p1
此選項(xiàng)更快,更簡(jiǎn)潔。在我們的例子中,我們得到窗口中CustAccount字段的總和,該字段由ChildContractId字段組成。 這些查詢的結(jié)果將是表格:
根據(jù)Sum列中獲得的數(shù)據(jù),我們確定從父合約轉(zhuǎn)移到子合同的金額。對(duì)于合同1000000002,我們?nèi)~償還了債務(wù),因此支付金額為200.對(duì)于協(xié)議1000000003,債務(wù)部分償還 - 支付金額等于計(jì)算后的余額和支付余額之和第一條記錄(-1000 + 600 = -400)。