2016-01-30 6 views
0

У меня была таблица с записями, принадлежащими некоторым catergory. Каждая запись имеет идентификатор (e_ID), каждая категория имеет идентификатор (c_ID), и для определения порядка содержимого (sort1) используется столбец, содержащий пользовательский заказ, представленный числами.SQL-порядок по значению из двух столбцов на основе условия

В настоящее время добавлена ​​вторая дополнительная категория. Если это число сортируется, сортировочный номер переходит в новый столбец (sort2), так что порядок первичной калории не будет перезаписан.

Раньше я использовал ORDER BY sort1, но теперь нужен sort1, если текущий элемент является основной категорией записи и sort2, если это вторичный канадский. Все записи, относящиеся к той же категории, сортируются пользователем, поэтому данные хранятся в двух столбцах. Могу ли я использовать оба метода таким образом в инструкции заказа?

e_ID c_ID c2_ID sort1 sort2 
1  7  3  1  27 
2  3  7  37  3 
3  7  -  2  - 
4  2  4  99  81 

expected order 1,3,2 for categroy 7 
+1

Вы можете добавить образец данных и ожидаемый результат в вопросе –

+0

@ VR46 Я усталым ... Один элемент относится к категории 3 и находится в положении 37 там. Таким образом, его номер заказа находится во втором столбце. –

+0

Что произойдет, если sort1 в строке 1 равен 3, а sort2 в строке 2 - 1? – Dunno

ответ

2

Я думаю, что вы ищут:

select t.* 
from t 
order by coalesce(c2_id, c_id), -- put similar categories together 
     coalesce(sort2, sort1) -- order according to your priority 

Если вы хотите ограничить внимание аг категории, а затем добавить:

where coalesce(c2_id, c_id) = 7 
+0

Я изменил строку 1 в примере данных в вопросе, чтобы она имела вторичную категорию, которая не равна 7 вместо значений «-». Что я получу за это? –

+0

@ C.O. , , , Ваша модификация не имеет смысла. Строки символов не сортируются так же, как цифры. –

+0

Есть noc-символы. То, что я подразумевал с '-' ранее, заключалось в том, что нет никакой ценности, это int на таблице, поэтому любое значение по умолчанию будет применяться вместо «-». Я пытаюсь понять, что у меня будет несколько строк, 'c_id = 7' и' c2_id' равны любому другому catergory, в то время как у меня также есть место где 'c2_id = 7', а' c_id' - это что-то не связанное. Для получения всего случая catergory 7 мне нужно отсортировать sort1, если 'c_id = 7' и sort2, если' c_id <> 7 AND c2_id = 7'. Это моя проблема, и мне было интересно, решает ли ваш ответ это. –

1

Если я понимаю, что вы хотите правильно, то должно работать:

SELECT * FROM my_table 
    WHERE c_ID = 7 
    ORDER BY sort1 
UNION 
SELECT * FROM my_table 
    WHERE c2_ID = 7 
    ORDER BY sort2 

Если вы не знакомы с UNION - это просто сочетает в себе два выбора в одном

+0

Да, это выглядит правильно. UNION - это единственный способ сделать это? Если это так, я должен, вероятно, перестроить все это и поставить сортировку на свой стол. –

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