Я не могу понять, как функционирует случай, у меня есть таблица, называемая продажами, вот как я ее допрошу, и это небольшой фрагмент вывода, я пытаюсь сделать вызов из SQL книгипорядок сортировки в t-sql
use TSQL2012
select custid,orderid, shippeddate
from sales.orders
Это выход (малая его часть)
85 10248 2006-07-16 00:00:00.000
79 10249 2006-07-10 00:00:00.000
34 10250 2006-07-12 00:00:00.000
80 11069 2008-05-06 00:00:00.000
44 11070 NULL
46 11071 NULL
Так что я должен был сделать это, чтобы получить все строки, где идентификатор клиента (CustID) составляет 20 И для сортировки в порядке возрастания отправленной даты с размещением NULL в конце. Это то, что я пытался сделать:
select orderid, shippeddate
from sales.orders
where custid = 20
order by
case when shippeddate is null then shippeddate end desc,
case when shippeddate is not null then shippeddate end asc
Он не возвращает абсолютно ничего, поэтому после того, как я взломал я решил посмотреть в Интернете для решения, и это он:
use TSQL2012
select orderid, shippeddate
from sales.orders
where custid = 20
order by case
when shippeddate is null then 1 else 0 end, shippeddate ;
Что 1 и 0 должны делать? Они неверны/ложны, они не являются порядковыми позициями, как они могут заменить desc
соответственно asc
? Я довольно новичок в SQL, извините за «объясните мне код cos», я слишком глупый вопрос »
Они просто буквальные целые числа. 1 = 1 и 0 = 0. 1 сортировки после 0. Вы ищете сложность, где ни один не существует. –
1 больше 0, это единственное «волшебство» здесь. Он в основном делит все записи на две группы, в которых «shippeddate is null» записываются последними. –
Все еще немного смущает тот факт, что я могу группировать вещи таким образом, никогда не видел ничего подобного. Спасибо – ExtremeSwat