早晨起来问一个数据库方面的(按某字段排序)
MSSQL 2000 + VB6.0
现在有一个表(没有KEY)
ROW DESC fValue
1 p 15
2 p 20
3 p 23
4 v 15
5 16
6 v 21
7 m 22
8 m 23
需要按指定规则排序 比如 V , M ,P 排序后改变行号继续保存在这个表中
可以增加临时表,方便导动数据等,
结果应该是
ROW DESC fValue
1 V 15 (其中排序关键字段相同的确时候,
2 V 21 行做第二排序关键字)
3 M 22
4 M 23
5 P 15
6 P 20
7 P 23
8 16 (不在指定范围的空格放最后)
[解决办法]
--創建測試環境
Create Table TEST
(ROW Int,
[DESC] Varchar(10),
fValue Int)
Insert TEST Select 1, 'p ', 15
Union All Select 2, 'p ', 20
Union All Select 3, 'p ', 23
Union All Select 4, 'v ', 15
Union All Select 5, ' ', 16
Union All Select 6, 'v ', 21
Union All Select 7, 'm ', 22
Union All Select 8, 'm ', 23
GO
--創建存儲過程
Create ProceDure SP_TEST(@OrderBy Varchar(100))
As
Begin
Create Table #T(ROW Int Identity(1, 1), [DESC] Varchar(10), fValue Int)
Insert #T ([DESC], fValue) Select [DESC], fValue From TEST Where Rtrim([DESC]) != ' ' Order By CharIndex([DESC], @OrderBy), ROW
Insert #T ([DESC], fValue) Select [DESC], fValue From TEST Where Rtrim([DESC]) = ' '
Select * From #T
Drop Table #T
End
GO
--測試
EXEC SP_TEST 'V,M,P '
GO
--刪除測試環境
Drop Table TEST
Drop ProceDure SP_TEST
--結果
/*
ROWDESCfValue
1v15
2v21
3m22
4m23
5p15
6p20
7p23
816
*/