查询以选择只属于ID和SUB-ID的记录



我试图构造一个查询,只返回与给定ID和SUB-ID相关的记录。如果条件不满足,我想返回第二种可能性,即第二个组合ID,Sub-ID。注意:数据有数千个ID,但每个ID只有2个子ID。

这是一个输入记录的例子:

ID    |  Sub-id  | VALUE
------------------------------
1    |     1    |  "T"
------------------------------
1    |     1    |  "F"
------------------------------
1    |     2    |  "Z"
------------------------------
1    |     2    |  "G"

所需输出为:

ID    |  Sub-id  | VALUE
------------------------------
1    |     1    |  "T"
------------------------------
1    |     1    |  "F"
------------------------------

如果我们只有与给定ID的第二个组合相关的记录,那么输出应该是:

ID    |  Sub-id  | VALUE
------------------------------
1    |     2    |  "Z"
------------------------------
1    |     2    |  "G"

我试图通过一个CTE表达式来实现这一点,但没有成功。考虑到我的情况,这种方法只返回了一张唱片。

我的尝试:

WITH CTE (ID,SUB-ID,DuplicateCount,VALUE) AS (
SELECT 
ID,
Sub-id,
ROW_NUMBER () OVER (PARTITION BY ID
ORDER BY SUB-ID) as DUPLICATECOUNT,
VALUE
FROM TBL_SOURCE

我错过了什么?

如果我没有错,你想要rank()而不是row_number():

select *
from (
select t.*, rank() over(partition by id order by subid) rn
from mytable t
) t
where rn = 1

rank()为具有相同idsubid的记录分配相同的编号,而row_number()则保证了序列的唯一性。

如果您只想将其用于给定的id,则可以使用top with ties:

select top (1) with ties t.*
from t
where id = 1
order by subid;

最新更新