테이블에 각 제품에 플래그가 지정된 3 개의 레코드가 필요합니다. 그러나 일부 제품에서만 1 ~ 2 개 레코드에 플래그가 지정되거나 레코드에 플래그가 지정되지 않은 경우 어떻게 제품 당 총 3 개까지 남은 레코드에 무작위로 플래그를 지정할 수 있습니까?SQL Server 2005의 특정 레코드 수에 대한 필드를 업데이트하십시오.
예 :
한 기록이 PRODUCT_A을 받았습니다 도착은,이 개 기록은 Product_B 신고 된 3 개 기록은 Product_C 신고 된.
스크립트가 완료되면 Product_A에 플래그가 지정된 2 개의 레코드와 Product_B에 대해 1 개의 플래그가 추가로 필요합니다.
이것은 루프 또는 cte 또는 sql에서이 작업을 수행하는 가장 효율적인 방법이 될 수 있습니다. 감사! 여기에 전체 샘플은 테스트 데이터를 포함입니다
;with SelectedIds as(
select
Id,
row_number() over (
partition by ProductCode -- distinct numbering for each Product Code
order by newid() -- random
) as rowno
from ProductLines
)
update p
set IsFlagged = 1
from ProductLines p
join SelectedIds s
on p.id = s.id and
s.rowno <= 3 -- limit to 3 records/product code
;
을 :
세 가지 기록이 제품 신고 된, 또는 수동으로 하나 또는 두 개의 레코드를 선택 무작위로 마지막 레코드 (들)을 따기위한 이유가 않는 문제를합니까? – lyrisey
먼저 테이블의 플래그를 기반으로 레코드에 플래그를 지정하기 위해 cte를 실행합니다. 일부 제품은 플래그가있는 3 개 레코드와 3 개 미만인 레코드를 모두 얻을 수 있습니다. 3 개 레코드 모두에 플래그가 지정되지 않으면 먼저 3 개 레코드에 플래그가 지정됩니다. 플래그가 3 개 이상이면 3 개 레코드에 플래그가 지정됩니다 그러나 3 개 미만인 경우에는 어떻게 되나요? – user2635406