Упорядочить по значению до NULL SQLSERVER - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь упорядочить каждый столбец по значению в алфавитном порядке, а затем NULL .Тем не менее, это не работает.Я пытался разместить заказ по каждому запросу до того, как полностью присоединился к нему, но это не позволяет, каковы некоторые возможные способы достижения цели?

Select t1.Name AS Doctor, t2.Name AS Professor, t3.Name AS Singer,t4.Name AS Actor
FROM (
      SELECT Name 
      FROM Occupation
      Where Occupation ='Doctor' 
                                )  t1 
FULL JOIN
    (
     SELECT Name 
     FROM Occupation
     Where Occupation ='Professor'
                                ) t2
on t1.Name=t2.Name
FULL JOIN
  (
     SELECT Name 
     FROM Occupation
     Where Occupation ='Singer'
                                ) t3
on t1.Name=t3.Name
FULL JOIN
   (
     SELECT Name 
     FROM Occupation
     Where Occupation ='Actor'
                               ) t4
on t1.Name=t4.Name
ORDER BY Doctor ASC, Professor ASC, Singer ASC, Actor ASC

Неправильный результат:

Doctor    Professor    Singer  Actor
-------------------------------------------
  NULL     NULL         NULL    Jane
  NULL     NULL         NULL    Julia
  NULL     NULL         NULL    Maria
  NULL     NULL         Meera   NULL
  NULL     NULL         Priya   NULL
  NULL     Ashley       NULL    NULL
  NULL     Christeen    NULL    NULL
  NULL     Ketty        NULL    NULL
  Jenny    NULL         NULL    NULL
  Samantha NULL         NULL    NULL

Ожидаемый результат:

Doctor    Professor    Singer  Actor
-------------------------------------------
  Jenny    Ashley       Meera   Jane
  Samantha Christeen    Priya   Julia
  NULL     Ketty        NULL    Maria
  NULL     NULL         NULL    NULL
  NULL     NULL         NULL    NULL
  NULL     NULL         NULL    NULL
  NULL     NULL         NULL    NULL
  NULL     NULL         NULL    NULL
  NULL     NULL         NULL    NULL
  NULL     NULL         NULL    NULL

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Используйте CASE, которое возвращает большее значение, если значение равно нулю, чем если оно не равно нулю.

...
ORDER BY CASE
           WHEN doctor IS NULL THEN
             1
           ELSE
             0
         END,
         doctor,
         CASE
           WHEN professor IS NULL THEN
             1
           ELSE
             0
         END,
         professor,
         CASE
           WHEN singer IS NULL THEN
             1
           ELSE
             0
         END,
         singer,
         CASE
           WHEN actor IS NULL THEN
             1
           ELSE
             0
         END,
         actor
0 голосов
/ 02 октября 2018

Вы также можете попробовать

order by case when Column is not null then Column else Replicate(char(255),Len(255)) end

, где вы замените 255 в Len (255) на точную длину столбца.

Я думаю, что это самое надежное решение, поскольку, если у вас есть все символы ascii в базе данных, значения 'z' равны 122, так что есть некоторая возможность, которую пользователь может использовать, например, для.'(' и это испортит ваш вид.

Но если у вас нет таких угловых случаев, то ответ от Милад Агамохаммади также в порядке и намного проще

0 голосов
/ 02 октября 2018

вы можете использовать

ORDER BY isnull(Doctor, 'zzzzzzzzzzzzzzz') ASC
       , isnull(Professor, 'zzzzzzzzzzzzzzz') ASC
       , isnull(Singer, 'zzzzzzzzzzzzzzz') ASC
       , isnull(Actor, 'zzzzzzzzzzzzzzz') ASC
...