Sql 仅更新具有共享/相似值的行

Sql 仅更新具有共享/相似值的行,sql,sql-server,tsql,Sql,Sql Server,Tsql,好的-我有一个简单的表格-在下面-我试图做的是只识别那些有共享值的行-所以任何有共享“apc”值的行-做x或者做Y CREATE TABLE #test (hcpcs varchar(10), apc varchar(100), rate money) INSERT INTO #test (hcpcs, apc) SELECT '97110', '8009' UNION ALL SELECT '71020', '8009' UNION ALL SELECT '85025', '8006'

好的-我有一个简单的表格-在下面-我试图做的是只识别那些有共享值的行-所以任何有共享“apc”值的行-做x或者做Y

CREATE TABLE #test (hcpcs varchar(10), apc varchar(100), rate money) 

INSERT INTO #test (hcpcs, apc)
SELECT '97110', '8009'
UNION ALL
SELECT '71020', '8009'
UNION ALL
SELECT '85025', '8006'

因此,从上面看,所有共享“8009”的行-我将对这些行进行gram更新-它们将共享相同的“速率”。带有“8006”的行将不属于该更新的一部分

您可以使用带有
计数(*)的CTE(按apc分区)

您只需将
Select
替换为
Update CTE
,实际上您将更新表
Test


您可以像下面这样尝试,其中内部查询将获得重复的
apc
groupbyapc
将按apc对行进行分组,并获得出现次数超过1次的apc

update #test
set rate = someval
where apc in ( 
select apc from #test
group by apc
having count(*) > 1
)
你想要:

WHERE EXISTS (SELECT *
     FROM #test t2
     WHERE t2.apc = #test.apc
     AND t2.hcpcs != #test.hcpcs)

确保对
apc
进行索引,以便有效地执行此操作。

OP在何处提到
HCPC
必须不同?假设表中不应有完全相同的行,
HCPC
似乎是一个区分列,并且能够满足这样一个事实,即有一个不同的行具有相同的
apc
select 
    distinct
    apc,
    countAPC = count(apc) over(partition by apc)
into
    #testShared
from 
    #test

update #test 
set 
    rate = 2
where
    apc = (select apc from #testShared where countAPC > 1)
WHERE EXISTS (SELECT *
     FROM #test t2
     WHERE t2.apc = #test.apc
     AND t2.hcpcs != #test.hcpcs)