#sql #sql-server
Вопрос:
У меня есть структура таблицы выше, где 1-я, 3-я и 5-я строки одинаковы. В таблице может быть много записей, но я использовал ее только в качестве примера. Поэтому, если данные столбца A, столбца B и столбца C совпадают, я должен обновить столбец флага как Да, иначе Нет. Я использую SQL Server 2019.
Я попытался обновить единственное » Да » в столбце флага со следующим запросом:
update table set Flag='Yes' where (SELECT Column A, Column B, Column C, COUNT(*) FROM Table GROUP BY Column A, Column B, Column C HAVING COUNT(*)>1 )
Но получаю следующую ошибку:
Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с»)».
Любая помощь будет признательна.
Комментарии:
1. «Но это не работает» При размещении вопроса вам нужно объяснить , почему он не работает. Мы не можем запустить ваш SQL, у нас нет доступа к вашей системе, и у нас нет доступных образцов данных, которые мы можем использовать, поэтому «Это не работает» мало что говорит нам. Если вы получаете сообщение об ошибке, включите его в свой вопрос. Если вы не получаете ожидаемых результатов, объясните, каковы эти результаты и почему они не являются тем, чего вы хотите/чего вы действительно хотите. Если вы получаете нежелательное поведение, расскажите нам, что это за поведение и почему это не то, чего вы хотите.
2. @Larnu, обновил вопрос, обязательно об этом позаботимся.
Ответ №1:
Обновляемый CTE, похоже, то, что вам нужно:
WITH CTE AS(
SELECT Flag,
COUNT(*) OVER (PARTITION BY ColumnA, ColumnB, ColumnC) AS DupeCount
FROM dbo.YourTable)
UPDATE CTE
SET Flag = CASE DupeCount WHEN 1 THEN 'No' ELSE 'Yes' END;
Ответ №2:
Если вы хотите обновить, вы можете использовать обновляемый CTE:
with toupdate as (
select t.*, count(*) over (partition by a, b, c) as cnt
from t
)
update toupdate
set flag = 'yes'
where cnt > 1;
Я бы предложил исправить таблицу, чтобы строки не дублировались на 100%, но, возможно, у вас есть другие столбцы, которые не упомянуты в вопросе.
Комментарии:
1. На самом деле именно так данные сохраняются в таблице и не могут изменить структуру таблицы. Я думаю, обязательные столбцы, разделяемые с вопросом? Я ценю ваши отзывы, спасибо.
2. @Shatanu . . . Учитывая, что ваш вопрос касается только присвоения «да» дублированным строкам, я удивлен, что вы не приняли этот ответ.
3. ,Я специально упомянул : я должен обновить столбец флага как Да, иначе Нет., и даже на скриншоте я обновил то же самое. Я уже упоминал, что я просто попытался обновить » Да «с помощью данного запроса, но это не работает, но я должен обновить» Да » или «Нет».