select Staff_ID, First_Name, Last_Name from YourTable order by cast(Staff_ID as varchar(10))+First_Name+Last_Name, Staff_IDプレ>
NULL値が最初に並べられます。
NULLで値を連結する場合 結果はNULLです だからFirst_Name+Last_NameNULLになります いずれかがNULLの場合 .
cast(Staff_ID as varchar(10))+...First_Name+Last_Nameの場合に必要な順序が保証されていますか? そうではないNULL(私はStaff_IDを想定していますintです ).そして列
Staff_IDによる余分な順序First_Name+Last_Nameのすべての行に対して必要な順序を保証するためにありますか はNULL更新
INFORMATION_SCHEMA.COLUMNS を使用して動的にクエリを作成できます。これはあなたが望むことをするかもしれません。これは、すべての種類のデータ型に対してテストされているわけではないことに注意してください。
declare @TableName sysname = 'YourTable' declare @Sql nvarchar(max) = 'select * from '+quotename(@TableName)+ ' order by ' select @Sql = @Sql+'+cast('+COLUMN_NAME+' as varchar(max))' from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName exec (@Sql)プレ>アップデート 2
代わりに XML を使用した非動的バージョン。
;with C as ( select *, row_number() over(order by (select 1)) as rn from YourTable ) select C1.* from C as C1 cross apply (select * from C as C2 where C1.rn = C2.rn for xml path('x'), type) as T(N) order by T.N.value('count(/x/*)', 'int')プレ>アップデート 3
テーブルの主キーが分かっていて、where 句を入力してもかまわない場合は、
row_number()を使用する代わりにこれを使用できます。 .select Y1.* from YourTable as Y1 order by (select * from YourTable as Y2 where Y1.Staff_ID = Y2.Staff_ID for xml path('x'), type).value('count(/x/*)', 'int')プレ>