sql大神現身吧,求教ID重排使其連續

時間 2022-03-12 18:30:18

1樓:落月

sql 2005的話,可以用下面這個語句:

update 表 set fid=dense_rank() over(order by fid asc)

如果是sql2000,那就只能用遊標了。

有問題請追問。

2樓:匿名使用者

create table testabc(

fid  int,

fname char(2)

);insert into testabc

select 1,  'a1'  from dual union all

select 1,  'a2'  from dual union all

select 1,  'a3'  from dual union all

select 2,  'b1'  from dual union all

select 2,  'b2'  from dual union all

select 2,  'b3'  from dual union all

select 4,  'd1'  from dual union all

select 4,  'd2'  from dual union all

select 8,  'f1'  from dual union all

select 8,  'f2'  from dual union all

select 10, 'e1'  from dual union all

select 10, 'e2'  from dual union all

select 10, 'e3'  from dual;

-- 先查詢, 模擬一個預期的結果.

select

fid, fname,

dense_rank() over(order by fid) as new_fid

from

testabc;

fid fnam    new_fid

---------- ---- ----------

1 a1            1

1 a2            1

1 a3            1

2 b1            2

2 b2            2

2 b3            2

4 d1            3

4 d2            3

8 f1            4

8 f2            4

10 e1            5

fid fnam    new_fid

---------- ---- ----------

10 e2            5

10 e3            5

已選擇13行。

-- 實際去更新.

update

testabc

setfid = (select new_fid from

(select

fid, fname,

dense_rank() over(order by fid) as new_fid

from

testabc

)  newtestabc  where  testabc.fid = newtestabc.fid  and  testabc.

fname = newtestabc.fname);

-- 核對更新結果.

select * from testabc;

fid fnam

---------- ----

1 a1

1 a2

1 a3

2 b1

2 b2

2 b3

3 d1

3 d2

4 f1

4 f2

5 e1

fid fnam

---------- ----

5 e2

5 e3

已選擇13行。

3樓:水色浮雲

with cte

as(select [fid]

,[fname]

,dense_rank() over(order by fid) as nid

from 表名

)update cte

set fid = nid

4樓:匿名使用者

這個是可以實現的,你用的是什麼資料庫

5樓:傳奇勇者

不用儲存過程完不成。

6樓:吾守護奇蹟

mark............

sql server裡面查詢上一條資料,sql語句怎麼寫(id是不連續的)?求大神指教

7樓:匿名使用者

select * from 表名 where 條件

8樓:匿名使用者

比如說id為12,13,15,16,17,20。

查詢 16 的上一條資料

select top 1 * from table where id<16 order by id asc

9樓:匿名使用者

你應該能先獲得你需要去的資料的 id 的集合吧。

在程式裡進行一個id的拼接,

如id的集合為 1、3、5、7、9,可以通過程式拼接成語句 select * from 表名 where id in (1,3,5,7,9) 執行就可以了

清空sql資料庫後怎麼讓序列id重1開始排列

10樓:小丁創業

方法和詳細的操作步驟如下:

1、第一步,可以看到一條新記錄已新增到mysql資料庫表中,id為59818,但顯然只有一條記錄,見下圖,轉到下面的步驟。

2、第二步,完成上述步驟後,可以通過「truncate table 表名」重置空id,以使id自動從1開始增加,見下圖,轉到下面的步驟。

3、第三步,完成上述步驟後,執行「

truncate table crew_test」語句,以重建空的crew_test表id,見下圖,轉到下面的步驟。

4、第四步,完成上述步驟後,再次開啟crew_test表並新增兩個新記錄,可以看到id從1開始增加,見下圖。這樣,以上的問題就解決了。

11樓:匿名使用者

可以把id列刪除,然後重新建立id列,並使之自增。

第一步,刪除id列:

alter table 表名 drop column id;

第二步,重新建立id列,使之自增:

alter table 表名 add id int identity (1,1) primary key;

12樓:匿名使用者

資料不可恢復性的刪除 truncate 標識列會重排

13樓:匿名使用者

truncate table table_name

truncate table 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。

若要刪除表定義及其資料,可以使用 drop table 語句。

14樓:匿名使用者

這還不簡單嗎?呵呵

刪除表,重建表吧,以下是具體操作步驟:

右鍵點選表——複製——開啟查詢分析器——在頂上的下拉框中選擇資料庫——在輸入框中右鍵——貼上——刪除原庫中的原表——回到查詢分析器中來——右鍵「執行」,一個表就重新建好了,id就會從1開始了呀。

15樓:匿名使用者

truncate table table_name

16樓:時珹

先drop 後create

mysql求大神優化sql語句

可以這樣寫成只使用1個子查詢 select a.b.d as day num,b.m as month num,b.y as year num from watersku a,select sum b.num as y,sum case when date format b.add time,y m...

求sql答案,求SQL答案

老師小喬 1.c 是被長期存放在計算機內的 有組織的 統一管理的相關資料的集合。a data b information c db d dbs 2.需求分析的主要方法是 a a 自頂向下 b 自底向上 c 從左到右 d 混合策略 3.在關係運算中,選取符合條件的元組是 d 運算。a 除法 b 投影 ...

求sql語句,求!!!SQL語句!

隨緣寫法你看是你要的不,實際上要是已經是1和0了 直接sum也行select a1,sum a2 sum a3 from a group by a1 既然已經是1和0了,那麼直接sum就可以了 select place,sum tdbz sum xdbz from table group by pl...