求一条sql语句

yyj135 2014-01-17 11:53:07
开发环境:SQL SERVER 2008 R2
假如有以下表:
姓名 朋友
张三 李四
张三 王五
李四 张三
王五 张三
刘黑七 王八
需求:
如果是单身的则全部保留,例如:
刘黑七 王八
如果是双向的,则删除一侧,例如:
张三 李四
张三 王五
李四 张三
王五 张三
只保留:
张三 李四
张三 王五

删除:
李四 张三
王五 张三

请问sql如何写,谢谢!
...全文
87 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzw_0736 2014-01-17
  • 打赏
  • 举报
回复

WITH a1 (姓名,朋友) AS
(
SELECT '张三','李四' UNION ALL
SELECT '张三','王五' UNION ALL
SELECT '李四','张三' UNION ALL
SELECT '王五','张三' UNION ALL
SELECT '刘黑七','王八'
)
SELECT *
FROM a1 a
WHERE NOT EXISTS(SELECT * FROM a1 b where a.朋友=b.姓名 AND a.姓名<>b.朋友)
LongRui888 2014-01-17
  • 打赏
  • 举报
回复
试试这个:
--drop table test
--go


create table test(姓名  varchar(10), 朋友 varchar(10))

insert into test
select '张三'                     ,'李四' union all
select '张三'                     ,'王五' union all
select '李四'                     ,'张三' union all
select '王五'                     ,'张三' union all
select '刘黑七'                   ,'王八'
go


;with t
as
(
select 姓名 ,朋友,
       ROW_NUMBER() over(order by getdate()) rownum
from test t1
),

tt
as
(
select *,
       (select count(*) from t t2
        where t1.姓名 = t2.朋友 and t1.朋友 = t2.姓名
             and t1.rownum >= t2.rownum) as flag
from t t1
)


select 姓名 ,朋友 
from tt
where flag = 0
/*
姓名	朋友
张三	李四
张三	王五
刘黑七	王八
*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧