Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите составить запрос  [new]
Element2
Member

Откуда: Украина
Сообщений: 22
Помогите составить запрос.
Есть таблица
declare @t1 table(p1 int, p2 int, p3 int, prizn int)
insert @t1 values
(205, 20, 1, 1),
(205, 20, 1, 2),
(205, 20, 1, 76),
(205, 22, 1, 1),
(205, 22, 1, 76),
(205, 22, 2, 1),
(208, 22, 3, 1),
(208, 22, 3, 2),
(208, 22, 3, 76),
(209, 22, 3, 76),
(210, 22, 3, 1),
(210, 22, 3, 2),
(210, 22, 3, 3),
(211, 22, 3, 76),
(212, 44, 1, 3)

Надо из неё выбрать строки, в которых prizn=76, и нету соответствующих строк (по полям p1, p2, p3) с prizn, равным 1 и 2.
т.е. чтоб из приведённой таблицы выбралось
(205, 22, 1, 76)
(209, 22, 3, 76)
(211, 22, 3, 76)
27 окт 11, 16:41    [11510689]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
почему тогда попал в результат р1=205?
27 окт 11, 16:48    [11510758]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Element2
Member

Откуда: Украина
Сообщений: 22
Knyazev Alexey,

р1=205, p2=20, p3=1 не попал потому что есть строки с признаком 1,2
р1=205, p2=22, p3=1 попал потому что нету строки с признаком 2
Вы про какую р1=205?
27 окт 11, 16:51    [11510803]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Element2
Вы про какую р1=205?


"Надо из неё выбрать строки, в которых prizn=76, и нету соответствующих строк (по полям p1, p2, p3) с prizn, равным 1 и 2."

почему в результат попала запись (205, 22, 1, 76) ? ведь по ней ЕСТЬ соответствующие строки (по полям p1, p2, p3) с prizn, равным 1 и 2 ???
27 окт 11, 16:53    [11510828]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
select * from @t1 t
  where prizn = 76
    and not exists ( select * from @t1 
                       where t.p1 = p1 
                         and t.p2 = p2 
                         and t.p3 = p3 
                         and ( prizn = 1 )
                   )
union
select * from @t1 t
  where prizn = 76
    and not exists ( select * from @t1 
                       where t.p1 = p1 
                         and t.p2 = p2 
                         and t.p3 = p3 
                         and ( prizn = 2 )
                   )

???
27 окт 11, 16:58    [11510892]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
Element2,

select p1,p2,p3,max(prizn) prizn
from  tl
group by p1,p2,p3 having sum(case when prizn=76 then 10
                                  when prizn in (1,2) then 1 
                                  else 0 
                             end ) in (10,11)
детский сад
27 окт 11, 17:00    [11510911]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
да, запрос построен на магии данных
27 окт 11, 17:00    [11510919]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Element2
Member

Откуда: Украина
Сообщений: 22
Knyazev Alexey,

потому что нету записи
(205, 22, 1, 2)
вот и попала.

т.е. нужно чтобы для
(a, b, c, 76)
были
(a, b, c, 1)
(a, b, c, 2)
Иначе - такую (a, b, c, 76) - мне в результаты
27 окт 11, 17:01    [11510926]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Element2
Member

Откуда: Украина
Сообщений: 22
Knyazev Alexey,
Спасибо!

env,
а Ваш запрос не будет правильно работать на таком наборе данных
declare @t1 table(p1 int, p2 int, p3 int, prizn int)
insert @t1 values
(210, 22, 3, 1),
(210, 22, 3, 1),
(210, 22, 3, 3),
(210, 22, 3, 76)

select p1,p2,p3,max(prizn) prizn
from  @t1
group by p1,p2,p3 having sum(case when prizn=76 then 10
                                  when prizn in (1,2) then 1 
                                  else 0 
                             end ) in (10,11)
27 окт 11, 17:13    [11511051]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
Element2,

11510919

под реальное использование допиливается с лёгкостью
27 окт 11, 17:16    [11511079]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
iljy
Member

Откуда:
Сообщений: 8711
Element2,

ну так считайте отдельно элементы с prizn =76, 1 и 2, а потом напишите условие.
27 окт 11, 17:27    [11511165]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить