2014-03-24 27 views
-1

我有一個表成員更新前10行有一個價值和未來10與另一

members 

id  data 
1   a 
2   a 
3   a 
4   b 
5   b 
6   b 
7   b 

在這裏,我想一日3點的ID被更新到,未來3名ID對B和未來3〜一個等等。請幫助我在SQL中執行此操作。

在此先感謝。

+1

聽起來像一個家庭作業的問題。 –

回答

1

這應該工作(假設SQL Server的2005+):

;WITH CTE1 AS 
(
    SELECT *, 
      id2 = ROW_NUMBER() OVER(ORDER BY id) - 1 
    FROM YourTable 
), CTE2 AS 
(
    SELECT *, 
      id2/3%2 N 
    FROM CTE1 
) 
UPDATE CTE2 
SET data = CASE WHEN N = 0 THEN 'a' ELSE 'b' END; 

SELECT * 
FROM YourTable 

Here is a sqlfiddle與演示。

+0

此查詢工作。非常感謝你。 – user3456551

4

請嘗試以下語句:

update members set data = 'a' where ((id-1)/3)%2 = 0; 
update members set data = 'b' where ((id-1)/3)%2 = 1; 
+0

您的查詢不適用於我。什麼是div?我試過這個 - 'select * from(where id/3)%2 = 0;'並且我得到了錯誤的行。 –

+0

+ 1,好的。雖然'id div 3'實際上應該是'id/3'。這也假設'id'是一個'INT',並且總是按順序編號的(儘管情況可能如此) – Lamak

+0

@Lamak - 該查詢給出了錯誤的結果。只有前兩行得到一個,下三個得到b,然後兩個得到一個...等等。 –

0
select id into #temp from members order by id 
declare @i int = 'a' 
While Exists (select * from #temp) 
begin 
update members 
set data = @i 
where id in (select top 1 id from #temp order by id) 
if(@i = 'a') 
    set @i = 'b'; 
else 
    set @i ='a' 
delete from #temp where id in (select top 1 id from #temp order by id) 
end 

select * from members 

以上的查詢都是偉大的,小的和精確的,但如果u [R尋找什麼,很簡單/很容易這應該工作:)