powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом (ну ОЧЕНЬ нужно)
10 сообщений из 10, страница 1 из 1
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026707
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите с запросом (ну ОЧЕНЬ нужно)
Есть таблица '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

Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026710
AlexanderVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
---------------------------------------------------------------------
у которого name = Первый день обхода и name = Первый день обхода
и в обоих случаях value = 1
---------------------------------------------------------------------
Ты тут ничего не перепутал?
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026712
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно перепутал. Спасибо.
Корректный вопрос следующий

Вопрос:
Как выбрать только тот id у которого name = Первый день обхода и name = Второй день обхода
и в обоих случаях value = 1

Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026734
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select id
from names
where value = 1 AND name IN('Первый день обхода','Второй день обхода')
group by id having count(*) = 2

PS
Может несколько топорный вариант
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026739
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другой вариант:

SELECT id
FROM names
WHERE value = 1 AND name = 'Первый день обхода'
UNION
SELECT id
FROM names
WHERE value = 1 AND name = 'Второй день обхода'

Тут следует заметить, что использование UNION без опции ALL аналогично применению DISTINCT на результат выборки. Если необходимо включить и повторяющиеся значения, то необходимо писать UNION ALL
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026745
Костя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
/*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
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026751
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, вариант с 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 = 'Второй день обхода'
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026755
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026758
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Glory & Костя

Ну, лично я считаю, что правильнее (опять же судя по плану выполнения) мой вариант с JOIN. Хотя там не мешало бы добавить DISTINCT

Но вопрос не о том. Почему вы вместе с Костей в выражении суммирования складываете 1 и NULL. Ведь записей с таким текстом может быть несколько. Логичнее было бы писать SUM()>0. Но в этом случае Вы получите предупреждение о некорректном использовании NULL в операторе.

Т.е. почемы вы вместо NULL не пишете 0 ?
...
Рейтинг: 0 / 0
Помогите с запросом (ну ОЧЕНЬ нужно)
    #32026763
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чё так сложно? А если тупо, в лоб?

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'Второй день обхода')

Или я чё-то не понимаю?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом (ну ОЧЕНЬ нужно)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]