2013-07-30 68 views
-3

目標是根據segment_code標誌1條記錄,其中Mtg_Flag = 1如果記錄不存在Mtg_Flag = 1然後用Mtg_Flag = 0標記該記錄。代碼將標記爲Mtg_Flag = 1的所有記錄爲1,但一旦運行,您如何標記其餘記錄Mtg_Flag = 0。我的例子有153個不同的segment_codes,只有146個和Mtg_Flag = 1。那麼,我該如何標記其餘的。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