Sql 如何在顶部选择中标记未选择的记录

Sql 如何在顶部选择中标记未选择的记录,sql,sql-server,Sql,Sql Server,我有一个要求,我只需要从一个组中选择一定数量的记录。但是,我还需要在中标记not choosen记录,即使它们需要在以后的日期引用 我在第一段有超过8万张唱片。要求选择50000条记录 我试过这个: UPDATE mytable SET [SuppressionReason] = 'REC LIMIT REACHED - S1' WHERE [ID] NOT IN ( SELECT TOP 50000 [ID] FROM mytable WHERE

我有一个要求,我只需要从一个组中选择一定数量的记录。但是,我还需要在中标记not choosen记录,即使它们需要在以后的日期引用

我在第一段有超过8万张唱片。要求选择50000条记录

我试过这个:

UPDATE mytable
   SET [SuppressionReason] = 'REC LIMIT REACHED - S1'
 WHERE
   [ID] NOT IN 
    (
     SELECT TOP 50000 [ID] FROM mytable
      WHERE segment = '1' 
    );

但是,这会导致0条记录在SuppressionReason字段中标记为“REC LIMIT REACHED-S1”。我遗漏了什么或做错了什么?

基于对以下代码的测试,您是否绝对确定您有超过50000条记录

DROP TABLE IF EXISTS #TEMP
CREATE TABLE #TEMP
(
    ID INT IDENTITY(1,1),
    FIRSTNAME VARCHAR(10),
    LASTNAME VARCHAR(10),
    SEGMENT INT,
    SUPPRESSION VARCHAR(10)
)

INSERT INTO #TEMP 
    (FIRSTNAME, LASTNAME, SEGMENT)
VALUES 
    ('JOHN', 'KRAMER',1),
    ('MATT','GEORGE',1),
    ('PHILIP','MCCAIN',1),
    ('ANDREW','THOMAS',1)

UPDATE #TEMP
    SET SUPPRESSION = 'YEP'
WHERE ID NOT IN 
    (SELECT TOP(2) ID FROM #TEMP WHERE SEGMENT = 1)

SELECT * FROM #TEMP
这将产生以下输出,我怀疑这正是您期望得到的结果

   1    JOHN    KRAMER  1   NULL
   2    MATT    GEORGE  1   NULL
   3    PHILIP  MCCAIN  1   YEP
   4    ANDREW  THOMAS  1   YEP

基于以下代码的测试,您是否绝对确定您拥有50000条以上的记录

DROP TABLE IF EXISTS #TEMP
CREATE TABLE #TEMP
(
    ID INT IDENTITY(1,1),
    FIRSTNAME VARCHAR(10),
    LASTNAME VARCHAR(10),
    SEGMENT INT,
    SUPPRESSION VARCHAR(10)
)

INSERT INTO #TEMP 
    (FIRSTNAME, LASTNAME, SEGMENT)
VALUES 
    ('JOHN', 'KRAMER',1),
    ('MATT','GEORGE',1),
    ('PHILIP','MCCAIN',1),
    ('ANDREW','THOMAS',1)

UPDATE #TEMP
    SET SUPPRESSION = 'YEP'
WHERE ID NOT IN 
    (SELECT TOP(2) ID FROM #TEMP WHERE SEGMENT = 1)

SELECT * FROM #TEMP
这将产生以下输出,我怀疑这正是您期望得到的结果

   1    JOHN    KRAMER  1   NULL
   2    MATT    GEORGE  1   NULL
   3    PHILIP  MCCAIN  1   YEP
   4    ANDREW  THOMAS  1   YEP

子查询中有
where segment='1'
,但外部查询中没有。这似乎有点奇怪。您是否检查过从mytable中选择TOP 50000[ID],其中segment='1'返回您期望的结果?是的,仅在SELECT语句中返回记录ID唯一吗?可能只有不到50000个唯一ID。问题中没有足够的信息来重现问题。子查询中有
where segment='1'
,但外部查询中没有。这似乎有点奇怪。您是否检查过从mytable中选择TOP 50000[ID],其中segment='1'返回您期望的结果?是的,仅在SELECT语句中返回记录ID唯一吗?可能只有不到50000个唯一ID。问题中没有足够的信息来重现问题。