Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
Помогите с запросом (ну ОЧЕНЬ нужно) Есть таблица 'names' (id[int], name[char], value[int]) 0 Первый день обхода 0 0 Второй день обхода 0 0 Ежедневный обход 1 5 Первый день обхода 0 5 Второй день обхода 1 5 Ежедневный обход 0 1 Первый день обхода 1 1 Второй день обхода 1 1 Ежедневный обход 1 2 Первый день обхода 1 2 Второй день обхода 0 2 Ежедневный обход 0 2 Новый день обхода 1 0 Новый день обхода 0 1 Новый день обхода 0 4 Первый день обхода 1 4 Первый день обхода 0 4 Ежедневный обход 0 4 Новый день обхода 0 Вопрос: Как выбрать только тот id у которого name = Первый день обхода и name = Первый день обхода и в обоих случаях value = 1 Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 06:19 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
--------------------------------------------------------------------- у которого name = Первый день обхода и name = Первый день обхода и в обоих случаях value = 1 --------------------------------------------------------------------- Ты тут ничего не перепутал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 06:27 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
Действительно перепутал. Спасибо. Корректный вопрос следующий Вопрос: Как выбрать только тот id у которого name = Первый день обхода и name = Второй день обхода и в обоих случаях value = 1 Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 06:40 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
select id from names where value = 1 AND name IN('Первый день обхода','Второй день обхода') group by id having count(*) = 2 PS Может несколько топорный вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 08:13 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
Другой вариант: SELECT id FROM names WHERE value = 1 AND name = 'Первый день обхода' UNION SELECT id FROM names WHERE value = 1 AND name = 'Второй день обхода' Тут следует заметить, что использование UNION без опции ALL аналогично применению DISTINCT на результат выборки. Если необходимо включить и повторяющиеся значения, то необходимо писать UNION ALL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 08:36 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
/*create table names(id int, name nvarchar(50), value int) insert names values (0, N'Первый день обхода', 0) insert names values (0, N'Второй день обхода', 0) insert names values (0, N'Ежедневный обход', 1) insert names values (5, N'Первый день обхода', 0) insert names values (5, N'Второй день обхода', 1) insert names values (5, N'Ежедневный обход', 0) insert names values (1, N'Первый день обхода', 1) insert names values (1, N'Второй день обхода', 1) insert names values (1, N'Ежедневный обход', 1) insert names values (2, N'Первый день обхода', 1) insert names values (2, N'Второй день обхода', 0) insert names values (2, N'Ежедневный обход', 0) insert names values (2, N'Новый день обхода', 1) insert names values (0, N'Новый день обхода', 0) insert names values (1, N'Новый день обхода', 0) insert names values (4, N'Первый день обхода', 1) insert names values (4, N'Первый день обхода', 0) insert names values (4, N'Ежедневный обход', 0) insert names values (4, N'Новый день обхода', 0) */ select a.id from ( select id , max (case when name = N'Первый день обхода' then 1 else null end )as [Первый день обхода] , max (case when name = N'Второй день обхода' then 1 else null end )as [Второй день обхода] from names where name in (N'Первый день обхода',N'Второй день обхода') and value = 1 group by id )as a where a.[Первый день обхода]=1 and a.[Второй день обхода]=1 Результат: id ----------- 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 08:51 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, вариант с UNION не проходит, поскольку это аналогично использованию "ИЛИ", а тебе необходимо "И". Тогда так: SELECT a.id FROM names a INNER JOIN names b ON a.id=b.id WHERE a.value = 1 AND a.name = 'Первый день обхода' AND b.value = 1 AND name = 'Второй день обхода' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 09:09 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
IMHO так будет лучше (по крайней мере судя по плану выполнения) и правильнее (по сравнению с моим первым вариантом) select id from names group by id having sum(case when name = N'Первый день обхода' and value = 1 then 1 else null end ) = 1 and sum(case when name = N'Второй день обхода' and value = 1 then 1 else null end ) = 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 09:47 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
2 Glory & Костя Ну, лично я считаю, что правильнее (опять же судя по плану выполнения) мой вариант с JOIN. Хотя там не мешало бы добавить DISTINCT Но вопрос не о том. Почему вы вместе с Костей в выражении суммирования складываете 1 и NULL. Ведь записей с таким текстом может быть несколько. Логичнее было бы писать SUM()>0. Но в этом случае Вы получите предупреждение о некорректном использовании NULL в операторе. Т.е. почемы вы вместо NULL не пишете 0 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 10:11 |
|
||
|
Помогите с запросом (ну ОЧЕНЬ нужно)
|
|||
|---|---|---|---|
|
#18+
А чё так сложно? А если тупо, в лоб? select distinct id from names n where exists(select * from names n1 where n.id=n1.id and n1.value=1 and n1.name=N'Первый день обхода') and exists(select * from names n2 where n.id=n2.id and n2.value=1 and n2.name=N'Второй день обхода') Или я чё-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2002, 10:59 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32026751&tid=1823266]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 298ms |
| total: | 430ms |

| 0 / 0 |
