Sql 如何从此结果中删除重复项
如何从此结果中删除重复项Sql 如何从此结果中删除重复项,sql,sql-server,database,Sql,Sql Server,Database,如何从此结果中删除重复项 select *, row_number() over (order by (select null)) as seqnum from [elo].[dbo].[objkeys] where parentid in (select parentid from [elo].[dbo].[objekte] inner join [elo].[dbo].[objkeys] on ob
select *,
row_number() over (order by (select null)) as seqnum
from [elo].[dbo].[objkeys]
where parentid in (select parentid
from [elo].[dbo].[objekte]
inner join [elo].[dbo].[objkeys] on objid = parentid
where objmask like 26 and okeydata like 'yes'
)
输出为
parentid okeyname okeydata
1 name a
1 number 1
1 yes_no yes
2 name a
2 number 1
2 yes_no yes
3 name a
3 number 1
3 yes_no no
4 name a
4 number 2
4 yes_no no
5 name b
5 number 3
5 yes_no yes
6 name b
6 number 3
6 yes_no yes
7 name b
7 number 3
7 yes_no no
8 name b
8 number 3
8 yes_no no
需要像这样
parentid okeyname okeydata
1 name a
1 number 1
1 yes_no yes
3 name a
3 number 1
3 yes_no no
5 name b
5 number 3
5 yes_no yes
7 name b
7 number 3
7 yes_no no
试试下面-
select * from
(
select *,row_number() over (partition by okeyname,okeydata order by parentid) as seqnum
from [elo].[dbo].[objkeys] inner join [elo].[dbo].[objekte]
on objid = parentid
where objmask like 26 and okeydata like 'yes'
)A where seqnum=1
似乎没有任何重复记录,但从resut集合来看,您似乎需要最小的parentid,并尝试如下操作
with cte as
(
your query output
) select min(parentid),okeyname,okeydata
from cte group by okeyname,okeydata
如果可以忽略“parentid”,则可以使用下面的代码
select distinct okeyname, okeydata,
row_number() over (order by (select null)) as seqnum
from [elo].[dbo].[objkeys]
where parentid in (select parentid
from [elo].[dbo].[objekte] inner join
[elo].[dbo].[objkeys]
on objid = parentid
where objmask like 26 and okeydata like 'yes'
)
我认为数据透视是一种更好的格式,让您可以轻松地做您想做的事情。首先要关注的是:
select parentid,
max(case when okeyname = 'name' then okeydata end) as name,
max(case when okeyname = 'number' then okeydata end) as number,
max(case when okeyname = 'yes_no' then okeydata end) as name
from [elo].[dbo].[objkeys]
group by parentid ;
然后,要获取第一个parentid,请使用子查询:
select min(parentid) as parentid, name, number, yes_no
from (select parentid,
max(case when okeyname = 'name' then okeydata end) as name,
max(case when okeyname = 'number' then okeydata end) as number,
max(case when okeyname = 'yes_no' then okeydata end) as yes_no
from [elo].[dbo].[objkeys]
group by parentid
) p
group by name, number, yes_no;
如果需要原始格式,则取消PIVOT:
select nny.parentid, v.*
from (select min(parentid) as parentid, name, number, yes_no
from (select parentid,
max(case when okeyname = 'name' then okeydata end) as name,
max(case when okeyname = 'number' then okeydata end) as number,
max(case when okeyname = 'yes_no' then okeydata end) as yes_no
from [elo].[dbo].[objkeys]
group by parentid
) p
group by name, number, yes_no
) nny cross apply
(values ('name', name),
('number', number),
('yes_no', yes_no)
) v(okeyname, okeydata)
你能解释一下吗?我看不到任何重复,因为所有的行都针对不同的id。okeyname['name']=ayes id中的属性为dublicate的id未dublicated,但okeydata中的数据为dublicate。为什么有父id为3的行存在?它的名字是“a”,因为“是”和“否”是不同的