2013-07-30 5 views
-3

목표는 segment_code에 대해 1 레코드로 플래그를 지정합니다. 여기서 Mtg_Flag = 1이없는 경우 Mtg_Flag = 1이 표시되고 Mtg_Flag = 0으로 레코드에 플래그를 지정합니다. 코드는 Mtg_Flag = 1 인 모든 레코드에 플래그를 지정하지만 일단 실행되면 나머지 레코드를 플래그하는 방법은 Mtg_Flag = 0입니다. 내 예에는 segment_codes이라는 153 개의 고유 번호와 Mtg_Flag = 1의 146 개의 고유 번호가 있습니다. 그럼, 어떻게 나머지 플래그를 segment_codesMtg_Flag = 0 어디 플래그합니까.SQL Server 2005의 플래그 레코드

코드 :

With LiveSam as (
Select acct_id,Row_Number() Over(Partition By Segment_Code Order By NewID()) 
    as  RowNumber 
From Table_tr 
Where LiveSam is NULL and seedrecordindicator is null and HasMtg_Flag = '1') 

Update Table_tr 
Set LiveSam = 'Y' 
From LiveSam L 
Where Table_tr.acct_id = L.acct_id 
    and L.RowNumber < 2 
    and Table_tr.acct_id is not NULL 

답변

1

당신은 CTE를 직접 업데이트 할 수 있습니다;

;WITH cte as -- don't call this a column name. Confusing. 
(
    Select acct_id,Row_Number() Over 
    (Partition By Segment_Code Order By NewID()) as RowNumber 
    From Table_tr 
    WHERE LiveSam is NULL 
    and acct_id IS NOT NULL 
    and seedrecordindicator is null 
    and HasMtg_Flag = '1' 
) 
UPDATE cte 
Set LiveSam = 'Y' 
Where RowNumber = 1; 

내가이 당신이 당신의 쿼리를 기반으로 필요하다고 생각하지만 정확하게 단어 문제를 따르도록 사람들을 원하는 경우, 이전에 일부 샘플 데이터를 표시하십시오 : 당신은 너무 복잡 후속 쿼리를 만들려고 노력하고 있습니다 업데이트 및 원하는 결과가 표시됩니다. 나는 당신이 처음에 그것들을 제거했을 때 Mtg_Flag = 0 인 행을 어떻게 갱신 할 것으로 예상 할 것인가에 대해서는 잘 모른다. ...

+0

예. 변수를 사용하여 추가 레코드 7 개를 표시하도록 한 걸음 더 나아갔습니다. 감사! – user2635406