sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik de NULL gewaardeerde records uit een tabel halen?

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

NULL waarden worden eerst besteld.

Bij het samenvoegen van een waarde met NULL het resultaat is NULL dus First_Name+Last_Name wordt NULL als er een is NULL .

cast(Staff_ID as varchar(10))+... is er garantie voor de bestelling die u wilt voor het geval wanneer First_Name+Last_Name is niet NULL (Ik neem aan Staff_ID is int ).

En de extra bestelling per kolom Staff_ID is er om de gewenste volgorde te garanderen voor alle rijen waar First_Name+Last_Name is NULL

Bijwerken

U kunt de query dynamisch opbouwen met INFORMATION_SCHEMA.COLUMNS. Dit doet misschien wat je wilt. Let op, dit is niet getest voor alle soorten gegevenstypen.

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)

Update 2

Een niet-dynamische versie die in plaats daarvan XML gebruikt.

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

Update 3

Als u de primaire sleutel van uw tabel kent en het niet erg vindt om de where-clausule te typen, kunt u deze gebruiken in plaats van 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. hoe autocommit wereldwijd in te stellen op false

  2. Laatste (laatste) onderscheiden hoogste waarde ophalen

  3. Hoe kan ik een SQL-hoofdlettergevoelige tekenreeksvergelijking maken op MySQL?

  4. PostgreSQL - GROUP BY-clausule of worden gebruikt in een aggregatiefunctie