Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 用于将行相互比较的组或条件语句_Sql Server - Fatal编程技术网

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