2013-08-02 2 views
1

Я новичок в SQL, как я пошел бы вместе с сортировкой следующее:Сортировка в SQL ж/несколько условий

У меня есть три различных типа Дев проектов (типа 1,2, и 3). У типов 1 и 2 также есть анализ, связанный с ними. Анализ и DEV типа 1 и 2 будут иметь связывающую родительский идентификатор, как бы я сортировать с этими спецификациями:

детали Процесс в следующей последовательности типа

  • Dev 3 проекта
  • Dev типа 1 или 2 проекта в сочетании с их пунктом анализа (Dev пункт столбцы имеют преимущественную силу запись анализа столбцов)
  • Оставаясь анализа проектов, не связанных проектов, разработчика

* EDIT * нижний ParentID должен прийти первым после того, как эти три спецификации

Пример столбцов таблицы являются:

|ParentID| AnalysisItemID | DevItemId | DevType | 
    1   Null    2   1 
    4   5    Null  Null 
    6   8    Null  Null  
    8   Null    9   3 
    6   Null    7   2 
    1   3    Null  Null 

отсортирован будет:

|ParentID| AnalysisItemID | DevItemId | DevType | 
    8   Null    9   3 
    1   Null    2   1 
    1   3    Null  Null 
    6   Null    7   2 
    6   8    Null  Null 
    4   5    Null  Null 
+0

вы пытались что-нибудь? какой порядок по предложению становится ближе? – Randy

+0

Я еще что-то пробовал, собирался попробовать предложения людей и оттуда – Bobcat88

+0

Какова ваша логика для сортировки? Если вы дадите нам ур логику, мы можем предложить лучшее решение. – Romesh

ответ

1

Для меня похоже, что вы хотите отсортировать данные по родительскому идентификатору, с упорядочением на основе максимального devtype для родителя.

Для этого вам нужно зарегистрироваться в сводной таблице, чтобы получить информацию для order by:

select t.* 
from t join 
    (select parentId, max(devtype) as maxdt 
     from t 
     group by parentId 
    ) p 
    on t.parentId = p.parentId 
order by (case when maxdt = 3 then 1 
       when maxdt in (1, 2) then 2 
       else 3 
      end), parentId, devtype desc 
+0

спасибо, отлично поработали .. http://sqlfiddle.com/#!2/16bdf/1/0 – Bobcat88

+0

Если Я хотел поставить это в конце хранимой процедуры, чтобы сортировать таблицу, как бы я ее изменил? – Bobcat88

+0

@ пользователь2433152. , , Я не понимаю вопроса. Вы можете поместить это в любую хранимую процедуру, в том числе в конце. –

0

Это некрасиво, но вы можете заказать результат из CASE в SQL. Я думаю, что-то похожее на:

SELECT * FROM MyTable 
    ORDER BY CASE WHEN DevType = 3 THEN 1 
       WHEN DevType IN (1, 2) THEN AnalysisItemID + 1 
       ELSE [bignumber] + AnalysisItemID END 

может делать то, что вам нужно.

Очевидно, что case также может быть инкапсулирован в пользовательскую функцию для удобочитаемости, если требуется. Однако есть вероятность, что это может повлиять на производительность.

Смежные вопросы