我的基表有以下结构
ID DC_NO DC_DATE NOB TAG_NO
110168 DC/NGO/270118/188 1/27/18 0:00 800 NGO/191217/17
110169 DC/NGO/270118/189 1/27/18 0:00 400 NGO/191217/17
110170 DC/NGO/270118/190 1/27/18 0:00 600 NGO/191217/17
110171 DC/NGO/270118/192 1/27/18 0:00 700 NGO/191217/17
110172 DC/NGO/270118/196 1/27/18 0:00 720 NGO/191217/17
110173 DC/NGO/290118/179 1/29/18 0:00 700 NGO/191217/17
110174 DC/NGO/290118/227 1/29/18 0:00 500 NGO/191217/17
110175 DC/NGO/300118/220 1/30/18 0:00 834 NGO/191217/17
110176 DC/NGO/300118/221 1/30/18 0:00 600 NGO/191217/17
110177 DC/NGO/300118/221 1/30/18 0:00 10 NGO/191217/17
110178 DC/NGO/020218/185 2/2/18 0:00 900 NGO/191217/17
110179 DC/NGO/020218/186 2/2/18 0:00 3 NGO/191217/17
110180 DC/NGO/050218/176 2/5/18 0:00 50 NGO/191217/17
110181 DC/NGO/050218/177 2/5/18 0:00 29 NGO/191217/17
110182 DC/NGO/050218/177 2/5/18 0:00 24 NGO/191217/17
110183 DC/NGO/060218/105 2/6/18 0:00 56 NGO/191217/17
我的可能输出表应该是这样的
DAY DC_DATE NOB ME
1 1/27/18 0:00 800 800
1 1/27/18 0:00 400 400
1 1/27/18 0:00 600 600
1 1/27/18 0:00 700 700
1 1/27/18 0:00 720 720
3 1/29/18 0:00 700 2100
3 1/29/18 0:00 500 1500
4 1/30/18 0:00 834 3336
4 1/30/18 0:00 600 2400
4 1/30/18 0:00 10 40
7 2/2/18 0:00 900 6300
7 2/2/18 0:00 3 21
10 2/5/18 0:00 50 500
10 2/5/18 0:00 29 290
10 2/5/18 0:00 24 240
11 2/6/18 0:00 56 616
TOTAL 6926 20563
我想为第一个dc_date分配值应该是1xNOB(1x800 = 800),第二个dc_date应该是3xNOB(3x700 = 2100),第三个dc_date应该是4xNOB(4x834 = 3336),依此类推到表的末尾。
如果更改dc_date,则DAY值应为,第二个日期 - 第一个日期+ 1(例如29.01.18-27.01.18 = 2 + 1 = 3),然后是第三个日期 - 第一个日期+ 1(例如30.01。 18-27.01.18 = 3 + 1 = 4)这个过程一直持续到表的末尾
**第一个(MIN)日期是基准日期,始终为1,并在两个日期之间减去后加上此值(例如29.01-27.01 = 2 + 1,30.01-27.01 = 3 + 1,0.02.02-27.01 = 6 + 1,05.02-27.01 = 9 + 1,06.02-27.01 = 10 + 1)
我通过查询所需的输出是" Total ME" = 20563和"平均ME" = 2.969(ME / NOB),用于上述基表。
我不想更新基表。请使用CTE查询。
分组依据应该在DC_DATE和TAG_NO。当TAG_NO改变时,DAY值应该再次从头开始。 NOB字段应该相加。
我正在使用sql server 2012
答案 0 :(得分:0)
你可以试试这个。
SELECT
DATEDIFF(DAY, MIN(DC_DATE) OVER(PARTITION BY TAG_NO), DC_DATE) + 1 DAY
, DC_DATE
, NOB
, (DATEDIFF(DAY, MIN(DC_DATE) OVER(PARTITION BY TAG_NO), DC_DATE) + 1) * NOB AS ME
FROM [MyTable]