Sql server 如何从select查询中每隔一行更新一次?

Sql server 如何从select查询中每隔一行更新一次?,sql-server,Sql Server,我有一个SQL查询,它从数据库中的一个表中提取160条记录 SELECT TableID, Number, Active FROM Table WHERE Number IN (SELECT Number FROM Table GROUP BY Number, Active HAVING COUNT(*) > 1 AND COUNT(*) < 3 AND Active = 1) ORDER BY Number, TableID 预期结果: TableID Number Acti

我有一个SQL查询,它从数据库中的一个表中提取160条记录

SELECT TableID, Number, Active FROM Table WHERE Number IN (SELECT Number 
FROM Table
GROUP BY Number, Active
HAVING COUNT(*) > 1 AND COUNT(*) < 3
AND Active = 1)
ORDER BY Number, TableID
预期结果:

TableID Number  Active
    38      662         1
    177     662         0
    58      702         1
    171     702         0
    13      716         1
    165     716         0
    77      814         1
    164     814         0
    63      1103        1
    174     1103        0

如果我理解正确,这应该可以做到:

WITH CTE AS
(
    SELECT  *, 
            COUNT(*) OVER(PARTITION BY Number, Active) N,
            ROW_NUMBER() OVER(PARTITION BY Number, Active ORDER BY Number) RN
    FROM dbo.YourTable
    WHERE Active = 1
)
UPDATE CTE
SET Active = 0
WHERE N = 2 AND RN % 2 = 1;
您需要确保查询首先返回正确的行:

WITH CTE AS
(
    SELECT  *, 
            COUNT(*) OVER(PARTITION BY Number, Active) N,
            ROW_NUMBER() OVER(PARTITION BY Number, Active ORDER BY Number) RN
    FROM dbo.YourTable
    WHERE Active = 1
)
SELECT *
FROM CTE
WHERE N = 2;

您使用的是哪个版本的SQL Server?请以文本形式共享示例数据和预期结果添加了顶部查询和预期结果的一个小示例这很接近,我在您的第二个示例中获得了16行额外数据。@BowerdotJson是的,我缺少一个条件,您可以现在重试
WITH CTE AS
(
    SELECT  *, 
            COUNT(*) OVER(PARTITION BY Number, Active) N,
            ROW_NUMBER() OVER(PARTITION BY Number, Active ORDER BY Number) RN
    FROM dbo.YourTable
    WHERE Active = 1
)
UPDATE CTE
SET Active = 0
WHERE N = 2 AND RN % 2 = 1;
WITH CTE AS
(
    SELECT  *, 
            COUNT(*) OVER(PARTITION BY Number, Active) N,
            ROW_NUMBER() OVER(PARTITION BY Number, Active ORDER BY Number) RN
    FROM dbo.YourTable
    WHERE Active = 1
)
SELECT *
FROM CTE
WHERE N = 2;