我有一個表成員更新前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中執行此操作。
在此先感謝。
我有一個表成員更新前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中執行此操作。
在此先感謝。
這應該工作(假設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
此查詢工作。非常感謝你。 – user3456551
請嘗試以下語句:
update members set data = 'a' where ((id-1)/3)%2 = 0;
update members set data = 'b' where ((id-1)/3)%2 = 1;
您的查詢不適用於我。什麼是div?我試過這個 - 'select * from(where id/3)%2 = 0;'並且我得到了錯誤的行。 –
+ 1,好的。雖然'id div 3'實際上應該是'id/3'。這也假設'id'是一個'INT',並且總是按順序編號的(儘管情況可能如此) – Lamak
@Lamak - 該查詢給出了錯誤的結果。只有前兩行得到一個,下三個得到b,然後兩個得到一個...等等。 –
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尋找什麼,很簡單/很容易這應該工作:)
聽起來像一個家庭作業的問題。 –