el_tot93 Ответов: 1

Orderby запись ASC в двух столбцах


Я пытаюсь упорядочить в форме громкие мои колонки в приложении windows. Я пытаюсь использовать этот код:

using (SqlCommand sqlcomm = new SqlCommand("SELECT * FROM remaining WHERE username=@username and status=@status and company_status=@company_status ORDER BY call_case ASC , Payment_Status ASC", sqlconn))


Это правильный способ сделать это?

Что я ищу является Заказатьпо (call_case) АСК, и когда call_case= (2 ответов) Заказатьпо (Payment_Status) АСК .

(  call_case ), ( Payment_Status )

     null    ,    null

  1-No Answer ,    null

  2-answer    ,    1-Promise Payment

  2-answer    ,    2-Have Problem

  2-answer    ,    3-Reject Payment

  3- not Exist ,      null


у меня есть заметка it my be help текст начинается с числа типа 1-нет ответа , 2-Ответ , 3 - не существует

Что я уже пробовал:

SELECT * FROM remaining 
WHERE username=@username 
and status=@status 
and company_status=@company_status 
ORDER BY      
   case when call_case='2-Answer' then 0 else 1 end ASC,      
   Payment_Status ASC

MadMyche

В общем, ты все понял, молодец. Он работает?

1 Ответов

Рейтинг:
8

#realJSOP

По умолчанию используется порядок "по возрастанию". Вам не нужно это уточнять. Кроме того, ваш код должен работать нормально.

Я бы, наверное, использовал CTE, но это только я.

;with cte as
(
    SELECT *,
           CASE WHEN call_case = '2-Answer' THEN 0 ELSE 1 END AS CallCaseOrder
    FROM   dbo.remaining 
    WHERE  username = @username 
    AND    status = @status 
    AND    company_status = @company_status,
)
SELECt * FROM cte
ORDER BY CallCaseOrder, PaymentStatus;

Я думаю, что это гораздо легче читать. Я также избегал бы использования "SELECT *Это плохая практика, и вы не можете сказать ей, чтобы она не включала ваши CallCaseOrder в возвращенном наборе данных.