Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да получа записите със стойност NULL от таблица?

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

Ако знаете първичния ключ на вашата таблица и нямате нищо против да въведете клаузата 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')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spotlight Cloud Basic:Най-добрият безплатен инструмент за наблюдение на производителността на базата данни

  2. Променете динамично името на колоните в sql

  3. Най-новите версии, издания и история на SQL Server

  4. Проблем с функцията за прозорец в SQL Server 2008 R2

  5. Пейджинг на базата на отместване/извличане (внедряване) в EntityFramework (с помощта на LINQ) за SQL Server 2008