我将以下结果存储在临时表#tempResult
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个而不是两个标记为<
的记录,而不管其他任何条件,只需SourceTypeID = 658
如何实现这一目标,谢谢。
答案 0 :(得分:2)
UPDATE tempResult
SET IsSelected = 1
WHERE SourceGuid IN (
SELECT SourceGuid
FROM tempResult
WHERE SourceTypeId = 658
LIMIT 1
)
答案 1 :(得分: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
所基于的列。
答案 2 :(得分: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