我真的遇到了一个问题,就是要找出两个columns
之间是否存在差异。 Row value
如下:
Serial code
D03L30225 A1
D03L30225 A1
D03L30225 A1
D03L30225 A1
D03L30225 A1
D03L30225 A1
D03L30225 A1
D03L30225 A1
D03L30225 A2
所以说如果最后有一个像A2这样的条目,有没有办法知道组合序列/代码差异。
我尝试了partition
和rank
等Windows功能但没有成功
答案 0 :(得分:1)
这对你有用。有一点需要注意的是,你必须按某种方式订购。也许我订购的东西不适合你的情况,但你需要一些东西。
IF OBJECT_ID('tempdb..#Test', 'U') IS NOT NULL DROP TABLE #Test;
create table #Test
(
Serial varchar(10),
code char(2)
)
insert into #Test values ('D03L30225', 'A1')
insert into #Test values ('D03L30225', 'A1')
insert into #Test values ('D03L30225', 'A1')
insert into #Test values ('D03L30225', 'A2')
;
with cte as
(
select rownum = row_number() over (order by Serial, code), Serial, code
from #Test
)
select curr.Serial, curr.code,
case
when curr.code <> prev.code then
1
else
0
end as 'DifferenceFlag'
from cte curr
left join cte prev on prev.rownum = curr.rownum - 1
如果您使用的是SQL Server 2012或更高版本,则可以使用LAG功能。我们仍在使用SQL Server 2008 R2。所以我最近需要做类似的事情,我找到了上面here使用的方法。
答案 1 :(得分:0)
根据您的评论,我假设您要在表格中添加另一列third_column
,并根据对Serial,Code
的更改
如果这是真的,你可以使用它:
ALTER TABLE
table_name
ADD
third_column numeric(18,0);
UPDATE t
SET t.third_column = t1.rwn
FROM table_name AS t
INNER JOIN
(select
serial, code
,row_number() over (order by serial, code) - 1 as rwn
from
table_name
group by
serial, code
order by
serial, code
) AS t1
ON
t.serial = t1.serial and t.code = t1.code;
答案 2 :(得分:0)
我可能会编写略有不同的代码。下面的第一个查询将列出具有多个序列号的代码。并且,第二个将标记整组代码,其中包含多个序列号。
提供的其他解决方案将为您提供正确的行号。无论如何,我不知道这是否会有所帮助,但祝你好运!
select
code,
count(distinct serial) cnt_serial
from table
group by code
having
count(distinct serial) > 1
OR
select
code,
serial,
case when count(distinct serial) over (partition by code) > 1 then 'Y' end fl_code_has_dup
from table