Sql 仅更新具有共享/相似值的行
好的-我有一个简单的表格-在下面-我试图做的是只识别那些有共享值的行-所以任何有共享“apc”值的行-做x或者做YSql 仅更新具有共享/相似值的行,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'
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)