SQL Server 按照特定關鍵字排序 總結

來源:互聯網
上載者:User

建立測試TABLE1

create table table1 (id int,name char)insert into table1select 1,'q'union all select 2,'r'union all select 3,'3'union all select 4,'5'

 

要求按指定的id順序(比如2,1,4,3)排列擷取TABLE1的資料

方法1:使用union all,但是最多隻能按256個關鍵字排序

select id,name from table1 where id=2union allselect id,name from table1 where id=1union allselect id,name from table1 where id=4union allselect 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)

 

*以上兩種方法適合在資料量非常小的情況下使用

方法3:使用遊標和暫存資料表
先建一個輔助表,裡面你需要的順序插入,比如2,1,4,3

 

create table t1(id int)insert into t1select 2union all select 1union all select 4union all select 3declare @id int                              --定義遊標declare c_test cursor forselect id from t1                       select * into #tmp from table1 where 1=2     --構造暫存資料表的結構OPEN c_test FETCH NEXT FROM c_test INTO @idWHILE @@FETCH_STATUS = 0BEGIN--按t1中的id順序插資料到暫存資料表insert into #tmp select id,name from table1 where id=@id   FETCH NEXT FROM c_test  INTO @idEndClose c_test                   deallocate c_test

 

*該方法適合需要按照輔助表的順序重排table的順序時使用
(即輔助表已經存在的情況)

方法4:分割字串參數

select * into #tmp from table1 where 1=2 --構造暫存資料表的結構declare  @str  varchar(300),@id  varchar(300),@m  int,@n  int  set  @str='2,1,4,3,'      ---注意後面有個逗號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

*該方法比較有通用性

測試結果
id          name
----------- ----
2           r
1           q
4           5
3           3

(所影響的行數為 4 行)

PS(POSTSCRIPT):個人比較喜歡用第四種,在排序條件不算太多的時候,直接寫成

order by charindex(欄位名,’條件1,條件2,條件3‘)就可以了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.