| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Нужна помощь в составлении запроса |
| Автор: insider92 23.11.2009, 21:20 | ||
| Собственно, сабж. В таблице есть поле примерно такого содержания:
Допустим, мне надо выбрать только те записи, у которых в этом поле есть элемент со вторым параметром равным 3849 и отсортировать их по значению третьего параметра этого элемента. Возможно ли такое? |
| Автор: Akina 23.11.2009, 23:33 |
| Пишите хранимую процедуру - такое вполне возможно. А вот в рамках запроса, когда количество групп не ограничено, такое сделать затруднительно. PS. Может, лучше подумать об изменении структуры? Уж больно криво сделано... |
| Автор: insider92 24.11.2009, 03:57 |
| Структура, конечно, кривая. Но софт уже разработан, большем им никто не занимается, исходников нет. А с процедурой не подскажете? |
| Автор: ТоляМБА 24.11.2009, 07:13 |
| insider92, почитай про составление процедур. Для твоей задачи изучи ещё LIKE, PATINDEX, SUBSTRING, LEN |
| Автор: insider92 24.11.2009, 15:02 | ||||
|
| Автор: DimW 24.11.2009, 15:48 | ||
в вашем случае функция т.к. есть потребность использовать ее в звпросе, причем не одна, а несколько: 1) (is_exist_param) функция которая возвращает true или false(0 или 1) в зависимости от того есть нужное значение в этом поле или нет параметры: а) значение поля б) значение которое ищите в) № параметра 2) (get_element) функция которая возвращает № элемента по значению которое в него входит параметры: а) значение поля б) значение которое ищите в) № параметра 3) (get_value) функция которая возвращает параметр элемента по № элемента и № параметра в этом элементе параметры: а) исходное значение б) № элемента в) № параметра для ваших требований запрос будет выглядеть примерно так:
|
| Автор: Akina 24.11.2009, 15:55 |
| Функции 2 и 3 вполне можно собрать в одну... А если ещё заставить её при отсутствии искомого значения возвращать пустую строку или там -1, то и одной функции достаточно. |
| Автор: DimW 24.11.2009, 16:28 |
ну это дело вкуса, на мой взляд названия функций говорят об однозначности их применимости в необходимой ситуации. я к тому что мне удобней строить логику по названию неже ли по признаку в кчестве параметра. |
| Автор: insider92 24.11.2009, 19:16 |
| DimW Спасибо, с запросом разобрались. Но в таком случае самая сложная-то часть здесь - функции. С ними не поможете? |
| Автор: insider92 24.11.2009, 21:28 | ||||||||
| В общем, посидел, подумал и пришел к следующему: Запрос
Функция
Работать - работает, но может можно еще как-то упростить и/или оптимизировать? UPD: Забыл, вот тестовый набор данных поля content:
|
| Автор: DimW 25.11.2009, 09:39 | ||
ну и как используя вашу функцию можно реализовать это:
Добавлено через 3 минуты и 22 секунды ааа, понятно: а если потребуется искать не по 3849 второго параметра, а по 1001 первого, еще одну функцию писать будете? |
| Автор: insider92 25.11.2009, 11:11 | ||
Меня еще беспокоит, что в запросе эта функция 2 раза указана, надеюсь она не будет дважды выполнятся для одного значения аргумента? |