Sql server 用于将行相互比较的组或条件语句
我有一个查询返回:Sql server 用于将行相互比较的组或条件语句,sql-server,Sql Server,我有一个查询返回: ID LINKID A B B A C D E F D C 我只想包括ID字段中没有linknum的ID。例如,我想要 ID LINKID A B C D E F 如何实现这一点,或者什么是扫描两列的好方法,这样如果linknum与ID相同,我们就不会将其添加到结果中?一个简单的内部联接应该可以做到这一点 select t.* from myTable t inner join myTable t1 on t
ID LINKID
A B
B A
C D
E F
D C
我只想包括ID字段中没有linknum的ID。例如,我想要
ID LINKID
A B
C D
E F
如何实现这一点,或者什么是扫描两列的好方法,这样如果linknum与ID相同,我们就不会将其添加到结果中?一个简单的内部联接应该可以做到这一点
select
t.*
from myTable t
inner join myTable t1 on
t.id = t1.linkid
您需要添加两列:FirstId和LastId,这两列将按时间顺序包含ID和LINKID中的第一个值。然后,使用ROW_NUMBER获得所需的结果:
这不会返回OP期望的输出。
WITH Cte AS(
SELECT *,
FirstId = CASE WHEN ID < LINKID THEN ID ELSE LINKID END,
LastId = CASE WHEN ID > LINKID THEN ID ELSE LINKID END,
RN = ROW_NUMBER() OVER(
PARTITION BY
CASE WHEN ID < LINKID THEN ID ELSE LINKID END,
CASE WHEN ID > LINKID THEN ID ELSE LINKID END
ORDER BY ID
)
FROM tbl
)
SELECT
ID, LINKID
FROM Cte
WHERE RN = 1