计算两列的差异并将结果输出到另一列
Calculate difference of two columns and output result in another column
目标 - 尝试根据行号和人员 ID 这两个条件计算月份之间的差异。
我不确定如何计算差值
月差要根据人ID和行号计算,
行号越高表示月份值最大
这是rextester中的数据。
当前数据
结果
我认为 lag()
可以满足您的要求:
select rownum, personid, month,
(month -
lag(month) over (partition by personid order by month)
) as diff
from t;
请注意,对于第一行,diff
将是 NULL
而不是 'First Time'
。
你可以测试一下here。
我不想在这里抢戈登的风头,因为他做了最难的部分。
这是将 NULL 转换为 'First Time' 的额外 bit。
create table #pivottabledata(Rownum int, PersonId int, Month int);
insert into #pivottabledata values(1,123,1);
insert into #pivottabledata values(2,123,2);
insert into #pivottabledata values(3,123,4);
insert into #pivottabledata values(4,123,5);
insert into #pivottabledata values(5,123,12);
insert into #pivottabledata values(1,222,1);
insert into #pivottabledata values(2,222,3);
insert into #pivottabledata values(3,222,4);
select * from #pivottabledata;
with cte (rownum,personid,month,diff) AS
(
select rownum, personid, month,
(month -
lag(month) over (partition by personid order by month)
) as diff
from #pivottabledata
)
SELECT rownum personid, month,
ISNULL(CAST(diff AS VARCHAR(max)), 'First Time') as diff
from cte;
目标 - 尝试根据行号和人员 ID 这两个条件计算月份之间的差异。
我不确定如何计算差值
月差要根据人ID和行号计算,
行号越高表示月份值最大
这是rextester中的数据。
当前数据
结果
我认为 lag()
可以满足您的要求:
select rownum, personid, month,
(month -
lag(month) over (partition by personid order by month)
) as diff
from t;
请注意,对于第一行,diff
将是 NULL
而不是 'First Time'
。
你可以测试一下here。
我不想在这里抢戈登的风头,因为他做了最难的部分。
这是将 NULL 转换为 'First Time' 的额外 bit。
create table #pivottabledata(Rownum int, PersonId int, Month int);
insert into #pivottabledata values(1,123,1);
insert into #pivottabledata values(2,123,2);
insert into #pivottabledata values(3,123,4);
insert into #pivottabledata values(4,123,5);
insert into #pivottabledata values(5,123,12);
insert into #pivottabledata values(1,222,1);
insert into #pivottabledata values(2,222,3);
insert into #pivottabledata values(3,222,4);
select * from #pivottabledata;
with cte (rownum,personid,month,diff) AS
(
select rownum, personid, month,
(month -
lag(month) over (partition by personid order by month)
) as diff
from #pivottabledata
)
SELECT rownum personid, month,
ISNULL(CAST(diff AS VARCHAR(max)), 'First Time') as diff
from cte;