2016-01-07 79 views
1

在SQL Server 2012数据库,我下表与总运行(RunAmount)SQL Server 2012中 - 掰开运行总计

<table><TBODY> 
 
<TR> 
 
<TH>BUDataId</TH> 
 
<TH>BU</TH> 
 
<TH>AccountNum</TH> 
 
<TH>Category</TH> 
 
<TH>CurrAmt</TH> 
 
<TH>BUMonth</TH> 
 
<TH>BUYear</TH></TR> 
 
<TR> 
 
<TD>1</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $9,700.00 </TD> 
 
<TD>1</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>2</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $19,437.00 </TD> 
 
<TD>2</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>3</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $29,560.00 </TD> 
 
<TD>3</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>4</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $38,465.00 </TD> 
 
<TD>4</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>5</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $48,584.00 </TD> 
 
<TD>5</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>6</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $59,654.00 </TD> 
 
<TD>6</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>7</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $67,900.00 </TD> 
 
<TD>7</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>8</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $77,699.00 </TD> 
 
<TD>8</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>9</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $87,486.00 </TD> 
 
<TD>9</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>10</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $97,000.00 </TD> 
 
<TD>10</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>11</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $99,687.00 </TD> 
 
<TD>11</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>12</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $1,200.00 </TD> 
 
<TD>1</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>13</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $2,400.00 </TD> 
 
<TD>2</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>14</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $3,600.00 </TD> 
 
<TD>3</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>15</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $4,654.00 </TD> 
 
<TD>4</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>16</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $6,538.00 </TD> 
 
<TD>5</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>17</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $7,277.00 </TD> 
 
<TD>6</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>18</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $8,400.00 </TD> 
 
<TD>7</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>19</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $9,609.00 </TD> 
 
<TD>8</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>20</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $10,658.00 </TD> 
 
<TD>9</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>21</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $12,055.00 </TD> 
 
<TD>10</TD> 
 
<TD>2015</TD></TR> 
 
<TR> 
 
<TD>22</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $12,900.00 </TD> 
 
<TD>11</TD> 
 
<TD>2015</TD></TR></TBODY></table>

我需要掰开运行达进每月的数量,因此表看起来像

<table><TBODY> 
 
<TR> 
 
<TH>BUDataId</TH> 
 
<TH>BU</TH> 
 
<TH>AccountNum</TH> 
 
<TH>Category</TH> 
 
<TH>CurrAmt</TH> 
 
<TH>BUMonth</TH> 
 
<TH>BUYear</TH> 
 
<TH>MonthlyAmt</TH></TR> 
 
<TR> 
 
<TD>1</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $9,700.00 </TD> 
 
<TD>1</TD> 
 
<TD>2015</TD> 
 
<TD> $9,700.00 </TD></TR> 
 
<TR> 
 
<TD>2</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $19,437.00 </TD> 
 
<TD>2</TD> 
 
<TD>2015</TD> 
 
<TD> $9,737.00 </TD></TR> 
 
<TR> 
 
<TD>3</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $29,560.00 </TD> 
 
<TD>3</TD> 
 
<TD>2015</TD> 
 
<TD> $10,123.00 </TD></TR> 
 
<TR> 
 
<TD>4</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $38,465.00 </TD> 
 
<TD>4</TD> 
 
<TD>2015</TD> 
 
<TD> $8,905.00 </TD></TR> 
 
<TR> 
 
<TD>5</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $48,584.00 </TD> 
 
<TD>5</TD> 
 
<TD>2015</TD> 
 
<TD> $10,119.00 </TD></TR> 
 
<TR> 
 
<TD>6</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $59,654.00 </TD> 
 
<TD>6</TD> 
 
<TD>2015</TD> 
 
<TD> $11,070.00 </TD></TR> 
 
<TR> 
 
<TD>7</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $67,900.00 </TD> 
 
<TD>7</TD> 
 
<TD>2015</TD> 
 
<TD> $8,246.00 </TD></TR> 
 
<TR> 
 
<TD>8</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $77,699.00 </TD> 
 
<TD>8</TD> 
 
<TD>2015</TD> 
 
<TD> $9,799.00 </TD></TR> 
 
<TR> 
 
<TD>9</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $87,486.00 </TD> 
 
<TD>9</TD> 
 
<TD>2015</TD> 
 
<TD> $9,787.00 </TD></TR> 
 
<TR> 
 
<TD>10</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $97,000.00 </TD> 
 
<TD>10</TD> 
 
<TD>2015</TD> 
 
<TD> $9,514.00 </TD></TR> 
 
<TR> 
 
<TD>11</TD> 
 
<TD>12</TD> 
 
<TD>AA</TD> 
 
<TD>N91</TD> 
 
<TD> $99,687.00 </TD> 
 
<TD>11</TD> 
 
<TD>2015</TD> 
 
<TD> $2,687.00 </TD></TR> 
 
<TR> 
 
<TD>12</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $1,200.00 </TD> 
 
<TD>1</TD> 
 
<TD>2015</TD> 
 
<TD> $1,200.00 </TD></TR> 
 
<TR> 
 
<TD>13</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $2,400.00 </TD> 
 
<TD>2</TD> 
 
<TD>2015</TD> 
 
<TD> $1,200.00 </TD></TR> 
 
<TR> 
 
<TD>14</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $3,600.00 </TD> 
 
<TD>3</TD> 
 
<TD>2015</TD> 
 
<TD> $1,200.00 </TD></TR> 
 
<TR> 
 
<TD>15</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $4,654.00 </TD> 
 
<TD>4</TD> 
 
<TD>2015</TD> 
 
<TD> $1,054.00 </TD></TR> 
 
<TR> 
 
<TD>16</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $6,538.00 </TD> 
 
<TD>5</TD> 
 
<TD>2015</TD> 
 
<TD> $1,884.00 </TD></TR> 
 
<TR> 
 
<TD>17</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $7,277.00 </TD> 
 
<TD>6</TD> 
 
<TD>2015</TD> 
 
<TD> $739.00 </TD></TR> 
 
<TR> 
 
<TD>18</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $8,400.00 </TD> 
 
<TD>7</TD> 
 
<TD>2015</TD> 
 
<TD> $1,123.00 </TD></TR> 
 
<TR> 
 
<TD>19</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $9,609.00 </TD> 
 
<TD>8</TD> 
 
<TD>2015</TD> 
 
<TD> $1,209.00 </TD></TR> 
 
<TR> 
 
<TD>20</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $10,658.00 </TD> 
 
<TD>9</TD> 
 
<TD>2015</TD> 
 
<TD> $1,049.00 </TD></TR> 
 
<TR> 
 
<TD>21</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $12,055.00 </TD> 
 
<TD>10</TD> 
 
<TD>2015</TD> 
 
<TD> $1,397.00 </TD></TR> 
 
<TR> 
 
<TD>22</TD> 
 
<TD>12</TD> 
 
<TD>BB</TD> 
 
<TD>N51</TD> 
 
<TD> $12,900.00 </TD> 
 
<TD>11</TD> 
 
<TD>2015</TD> 
 
<TD> $845.00 </TD></TR></TBODY></table>

我确定有一个窗口函数在这里的某处,但不知道确切的位置。任何帮助将不胜感激

+0

我更新了我的数据为例,说明一个更真实地表达数据。 @ JamieD77接近,但滞后正在继续。我很抱歉没有发布其他属性。我确信他们可能会改变你的建议 – FrankK

回答

2

SQL 2012有一个LAG功能,可以给你以前的RunAmount。使用此并减去从目前的RunAmount让你MonthAmt

SELECT *, 
     [RunAmount] - ISNULL(LAG([RunAmount]) OVER (ORDER BY [Year], [Month]),0) MonthAmt 
FROM MyTable 

ISNULL会给你第一行零值,因为没有以前的记录,这将返回null。

0

不是最快的一个,但也将做的工作(在旧版本)中:

DECLARE @id = 1 WHILE @id <=(Select max(id) FROM[YourTable]) BEGIN SELECT * ,[MonthAmt] = [RunAmount] - ISNULL((SELECT [RunAmount] FROM [YourTable] WHERE [ID] = @id-1),0) FROM [YourTable] WHERE [ID] = @id SELECT @id = @id + 1 END

1

这适用于所有版本

with cte 
as 
(
select *,row_number() over (partition by yearr order by id) as rn 
from test1_soe 
) 
select t1.*,isnull(t1.runamount-t2.runamount,t1.runamount) as nxt 
from 
cte t1 
left join 
cte t2 
on 
t1.rn=t2.rn+1 
+0

你在'按年份划分'背后的想法是什么?小数据的样本,我不知道我们可以假设。 – shawnt00

+0

我需要顺序排列的rownumbers,所以我由一个组划分,也可能不会重复几个月 – TheGameiswar