2016-06-08 2 views
2

я следующий результат сохраняется в таблице темп #tempResultUpdate только одна запись в SQL Server условно

SourceGuid   SourceTypeID   IsSelected 
-------------------- -------------------- ---------- 
84588BAF068320450908  129     0 
5367D0F80A0F4040E909  658     0 < 
872791440CDBE04F7C0B  658     0 < 
15ABA6B70E4A70463E0B  887     0 
1DE39F9805A8A044B20B  887     0 
3F96C93501144041D50A  887     0 
6A01DFF705861049F509  887     0 

мне нужно сделать значение IsSelected до 1 из только один и не оба из записи, помеченной < до 1 независимо от каких-либо других условий только SourceTypeID = 658

Как я могу достичь этого, спасибо.

+0

Итак, вам нужна только одна строка для обновления, но не все, на основе условия 'WHERE'? –

+0

Обновить tbl_name set column = yourvalue WHERE condition = true – Mono

+0

@FelixPamittan да и только одна запись, где sourceid = 658 не все – RandomUser

ответ

1

Вы можете использовать CTE, чтобы получить TOP 1, а затем сделать UDPATE:

;WITH CTE AS(
    SELECT TOP (1) * 
    FROM #tempResult 
    WHERE SourceTypeId = 658 
    ORDER BY NEWID() 
) 
UPDATE CTE SET IsSelected = 1 

ORDER BY NEWID() обозначает случайный вид. Замените NEWID() на колонку, на которой вы хотите установить TOP.

+0

Есть ли другой способ сделать это? @Felix – Mukund

+0

Я получаю ошибку при выполнении инструкции в порядке, а также с помощью WITH – RandomUser

+0

Какая ошибка, попробуйте префикс предложения 'WITH' с'; ':'; WITH CTE AS .... ' –

2
UPDATE tempResult 
    SET IsSelected = 1 
WHERE SourceGuid IN (
    SELECT SourceGuid 
    FROM tempResult 
    WHERE SourceTypeId = 658 
    LIMIT 1 
) 
+2

Это работает только в MySQL. В SQL Server вам нужно Top 1. – Mono

+0

Да, для SQL-агрегата должна использоваться верхняя часть (поскольку ограничение не поддерживается) – Prateek

1

Вы можете использовать ROW_NUMBER() с CTE:

WITH CTE AS(
    SELECT t.*, 
      ROW_NUMBER() OVER(PARTITION BY t.SourceTypeID ORDER BY t.sourceGuid) as rnk 
    FROM YourTable t) 
UPDATE CTE 
set IsSelected = 1 
WHERE rnk = 1 

Это будет динамичным и будет работать для всех данных, если вы просто хотите SourceTypeID = 658 быть обновлены, а затем добавить пункт WHERE:

WHERE SourceTypeId = 658 

Внутри CTE

+1

Спасибо за решение – RandomUser

Смежные вопросы