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_Name
NULL
होगा अगर कोई 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
यदि आप अपनी तालिका की प्राथमिक कुंजी जानते हैं और 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')