二个字段,如果交叉相同,取一行,求SQL

vansoft 2015-05-28 10:52:42
字段A,字段B
1, 2
2, 1

这二行只要一行。

SQL如何写
...全文
399 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-05-28
  • 打赏
  • 举报
回复
SELECT * FROM TB T1
WHERE NOT EXISTS(SELECT 1 FROM TB T2 WHERE T1.字段A=T2.字段B
AND T1.字段B=T2.字段A AND T1.字段A>T2.字段A)
卖水果的net 版主 2015-05-28
  • 打赏
  • 举报
回复

-- 借 楼上几位的数据 

;WITH cte(A,B) AS
(
 SELECT 1,2 UNION ALL
 SELECT 2,1 UNION ALL
 SELECT 2,1 UNION ALL
 SELECT 2,2 UNION ALL
 SELECT 2,1 UNION ALL
 SELECT 2,2 UNION ALL
 SELECT 2,2
)
select 
distinct 
case when A > B then A else B end A ,
case when A > B then B else A end B 
 from cte

A           B
----------- -----------
2           1
2           2

(2 行受影响)



还在加载中灬 2015-05-28
  • 打赏
  • 举报
回复
@u010024618
我觉得如果是SQL2005,可以用开窗函数
;WITH CTE AS(
SELECT 字段A,字段B
,ROW_NUMBER()OVER(PARTITION BY
CASE WHEN 字段A>字段B THEN 字段A ELSE 字段B END
,CASE WHEN 字段A>字段B THEN 字段B ELSE 字段A END
ORDER BY 字段A)RN
FROM TB
)
SELECT 字段A,字段B FROM CTE WHERE RN=1
freecodex 2015-05-28
  • 打赏
  • 举报
回复
引用 3 楼 ky_min 的回复:
其实大概就可以了 如果要用JOIN,那样不存在交叉的数据也会过滤掉
你说的对
还在加载中灬 2015-05-28
  • 打赏
  • 举报
回复
其实大概就可以了

如果要用JOIN,那样不存在交叉的数据也会过滤掉
freecodex 2015-05-28
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
SELECT * FROM TB T1
WHERE NOT EXISTS(SELECT 1 FROM TB T2 WHERE T1.字段A=T2.字段B
	AND T1.字段B=T2.字段A AND T1.字段A>T2.字段A)
这个思路基本正确,不过要筛选这样的记录: 字段A,字段B 2, 2 2, 2 需要稍微修改下: T1.字段A >= T2.字段A 另外的做法,自连后去重:
;WITH cte(A,B) AS
(
 SELECT 1,2 UNION ALL
 SELECT 2,1 UNION ALL
 SELECT 2,1 UNION ALL
 SELECT 2,2 UNION ALL
 SELECT 2,1 UNION ALL
 SELECT 2,2 UNION ALL
 SELECT 2,2
)
SELECT DISTINCT *
FROM cte a INNER JOIN cte b ON a.A = b.B AND a.B = b.A AND a.A >= b.A

34,838

社区成员

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

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