亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

如何按指定的順序獲取數(shù)據(jù)數(shù)據(jù)庫教程 -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

    數(shù)據(jù)

    原貼地址:http://community.csdn.net/Expert/topic/3693/3693091.xml?temp=.6086542

    測(cè)試table

    create table table1 (id int,name char)

    insert into table1

    select 1,'q'

    union all select 2,'r'

    union all select 3,'3'

    union all select 4,'5'

    要求按指定的id順序(比如2,1,4,3)排列獲取table1的數(shù)據(jù)

    方法1:使用union all,但是有256條數(shù)據(jù)的限制

    select id,name from table1 where id=2

    union all

    select id,name from table1 where id=1

    union all

    select id,name from table1 where id=4

    union all

    select id,name from table1 where id=3

    方法2:在order by中使用case when

    select id ,name from t where id in (2,1,4,3)

    order by (case id

    when 2 then 'A'

    when 1 then 'B'

    when 4 then 'C'

    when 3 then 'D' end)

    *以上兩種方法適合在數(shù)據(jù)量非常小的情況下使用

    方法3:使用游標(biāo)和臨時(shí)表

    先建一個(gè)輔助表,里面你需要的順序插入,比如2,1,4,3

    create table t1(id int)

    insert into t1

    select 2

    union all select 1

    union all select 4

    union all select 3

    declare @id int                             --定義游標(biāo)

    declare c_test cursor for

    select id from t1

    select * into #tmp from table1 where 1=2    --構(gòu)造臨時(shí)表的結(jié)構(gòu)

    OPEN c_test

    FETCH NEXT FROM c_test

    INTO @id

    WHILE @@FETCH_STATUS = 0

    BEGIN

    --按t1中的id順序插數(shù)據(jù)到臨時(shí)表

    insert into #tmp select id,name from table1 where id=@id

    FETCH NEXT FROM c_test INTO @id

    End

    Close c_test

    deallocate c_test

    *該方法適合需要按照輔助表的順序重排table的順序時(shí)使用

    (即輔助表已經(jīng)存在的情況)

    方法4:分割字符串參數(shù)

    select * into #tmp from table1 where 1=2 --構(gòu)造臨時(shí)表的結(jié)構(gòu)

    declare @str varchar(300),@id varchar(300),@m int,@n int

    set @str='2,1,4,3,'     ---注意后面有個(gè)逗號(hào)

    set @m=CHARINDEX(',',@str)

    set @n=1

    WHILE @m>0

    BEGIN

    set @id=substring(@str,@n,@m-@n)

    --print @id

    insert into #tmp select id,name from table1 where id=convert(int,@id)

    set @n=@m+1

    set @m=CHARINDEX(',',@str,@n)

    END

    *該方法比較有通用性

    測(cè)試結(jié)果

    id         name

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

    2          r

    1          q

    4          5

    3          3

    (所影響的行數(shù)為 4 行)

最新文章