Intereting Posts
Чистый способ использования функций окна postgresql в ORM django? Как ограничить поиск и заменить строку в mySQL Вызов службы WCF из хранимой процедуры SQL CLR TypeError: объект 'int' не поддерживает индексирование Ошибка в объявлении переменной mysql bigint внутри пользовательской функции nextval Является ли это ложным предупреждением при использовании LINQ to SQL? Что означает число в скобках? SQL-запрос, подсчет подзапроса? как выбрать все данные, чей входной массив найден и не найден в mysql Hibernate – отношение «один ко многим» – внешний ключ всегда «null» MYSQL Выбор возвратно-поступательных данных? Как создать новый столбец в выбранном запросе TSQL Выберите строку Min & Max при группировке android.database.sqlite.SQLiteException: таблица X не имеет столбца с именем Y :, при компиляции: INSERT INTO Как подсчитать количество раз, когда два значения отображаются в двух столбцах в любом порядке

Обновить только строки с разделяемыми / схожими значениями

ОК – у меня есть простая таблица – ниже – то, что я пытаюсь сделать, это определить только те строки, которые имеют общую ценность, – так что все, что имеет общее значение «apc» – DO x else Do 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» – я буду грабровать эти строки для обновления – они будут использовать одну и ту же «скорость». Строка с «8006» не будет частью этого обновления

Вы хотите:

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

Убедитесь, что 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) 

Вы можете использовать CTE с Count(*) over ( Partition By apc) :

 WITH CTE AS( SELECT t.hcpcs, t.apc, t.rate, count_apc = Count(*) over ( Partition By t.apc) FROM Test t ) SELECT hcpcs, apc, rate FROM cte WHERE count_apc > 1 

демонстрация

Вы можете просто заменить Select с помощью Update CTE , на самом деле вы обновите таблицу Test .

демонстрация

Вы можете попробовать, как показано ниже, где внутренний запрос доставит вам apc который был повторен. group by apc будет группировать строки по apc и получить apc, который имеет более одного вхождения.

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