如果值更改,则返回行

时间:2018-10-15 10:26:12

标签: sql sql-server

我有以下输入内容

enter image description here

每当PRD列值更改时,都应返回行。所以我想要的输出如下:

enter image description here

我的表格结构 enter image description here

2 个答案:

答案 0 :(得分:0)

尝试使用lag()函数

Demo

select * from 
(
select *,lag(PRD,1,0) over(order by PRD,LOCID,FILEID) as pvalue
from tablename
)x where isnull(PRD,'1970-01-01')<>isnull(pvalue,'1970-01-01')

答案 1 :(得分:0)

您要使用lag()。我认为这是正确的逻辑:

select * 
from (select t.*,
             lag(prd) over (partition by locid order by fileid) as prev_prd
      from t
     ) t
where (prd <> prev_prd) or
      (prev_prd is null and prd is not null) or
      (prev_prd is not null and prd is null);

SQL Server没有安全的NULL比较,因此NULL使比较逻辑稍微复杂一点。

这假设fileid是行的顺序。如果不是这种情况,则order by必须是指定顺序的列。