sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg få de NULL værdisatte poster fra en tabel?

select Staff_ID, First_Name, Last_Name
from YourTable
order by cast(Staff_ID as varchar(10))+First_Name+Last_Name,
         Staff_ID
 

NULL værdier vil blive bestilt først.

Når du sammenkæder en værdi med NULL resultatet er NULLFirst_Name+Last_Name vil være NULL hvis nogen er NULL .

cast(Staff_ID as varchar(10))+... er der garanti for den rækkefølge, du ønsker for sagen, når First_Name+Last_Name er ikke NULL (Jeg går ud fra Staff_ID er int ).

Og den ekstra rækkefølge efter kolonne Staff_ID er der for at garantere den ønskede rækkefølge for alle rækker, hvor First_Name+Last_Name er NULL

Opdater

Du kan bygge forespørgslen dynamisk ved hjælp af INFORMATION_SCHEMA.COLUMNS. Dette kan gøre, hvad du vil. Bemærk, dette er ikke testet for alle slags datatyper.

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)
 

Opdatering 2

En ikke-dynamisk version, der bruger XML i stedet for.

;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')

Opdatering 3

Hvis du kender den primære nøgle i din tabel og ikke har noget imod at skrive where-sætningen, kan du bruge denne i stedet for at bruge 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')
 


  1. Sådan konfigureres AppArmor til MySQL-baserede systemer (MySQL/MariaDB Replication + Galera)

  2. få fælles rækker fra en tabel mod en hvilken som helst kolonne

  3. SELECT SQL_CALC_FOUND_ROWS Forespørgsel meget langsom mere end 250.000 poster

  4. .NET:Sådan indsætter du et XML-dokument i SQL Server