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

Откуда:
Сообщений: 8
Здравствуйте
есть таблица
AttributeValueId AttributeNameId Value ArId
1 1 44 1
2 1 A05 2
3 1 48 3
4 1 50 4
5 2 A15 5
6 3 65 5
7 4 C16 5
8 2 A05 6
9 3 B70 6
10 4 С15 6
11 2 A65 7
12 3 B70 7
13 4 C16 7
14 5 NULL 5
15 5 NULL 6
16 5 12 7
17 2 NULL 8
18 3 NULL 8
19 4 NULL 8
20 5 14 8

Мне необходимо выбрать значения ArId которые удовлетворяют следующему условию:
Value = A05,B70,С15 AND AttributeNameId=2,3,4
Сделал такой запрос:
select ArId from [AttributeValue] where [Value] in('A05','B70', 'C15') and [AttributeNameId] in (2,3,4)

Но он выводит ArId = 2,6,7 а должен быть только 6, т.к. он один удовлетворяет всем 3 условиям.
Вопрос вроде не сложный, но что-то никак не соображу.
31 май 13, 09:40    [14373754]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
cronwerk
т.к. он один удовлетворяет всем 3 условиям.

Каким 3 условиям, если у вас их всего два - [Value] in и [AttributeNameId] in
31 май 13, 09:44    [14373779]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
where ([Value] = 'A05' and AttributeNameId = 2)
or ([Value] = 'B70' and AttributeNameId = 3)
or ([Value] = 'C15' and AttributeNameId = 4)
31 май 13, 09:46    [14373791]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Похоже не то, сложно понять что хочет автор)
31 май 13, 09:51    [14373814]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Скорее всего автор хочет сравнивать кортежи
Т.е. чтобы выбрать те ArId, для которых есть все 3 записи с заданными условиями.
31 май 13, 09:53    [14373829]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
cronwerk
Member

Откуда:
Сообщений: 8
Glory
cronwerk
т.к. он один удовлетворяет всем 3 условиям.

Каким 3 условиям, если у вас их всего два - [Value] in и [AttributeNameId] in

видимо не правильно выразился, скорее так: 2 условия по 3 параметрам ОДНОВРЕМЕННО
31 май 13, 09:53    [14373830]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
cronwerk
Member

Откуда:
Сообщений: 8
Glory
Скорее всего автор хочет сравнивать кортежи
Т.е. чтобы выбрать те ArId, для которых есть все 3 записи с заданными условиями.


Точно так
31 май 13, 09:53    [14373832]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
select ArID
from t
where ([Value] = 'A05' and AttributeNameId = 2)
or ([Value] = 'B70' and AttributeNameId = 3)
or ([Value] = 'C15' and AttributeNameId = 4)
group by ArID
having count(*)=3
31 май 13, 09:54    [14373836]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
cronwerk
Member

Откуда:
Сообщений: 8
Спасибо!
31 май 13, 10:17    [14373965]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ambarka_max
select ArID
from t
where ([Value] = 'A05' and AttributeNameId = 2)
or ([Value] = 'B70' and AttributeNameId = 3)
or ([Value] = 'C15' and AttributeNameId = 4)
group by ArID
having count(*)=3
Тогда уж
select ArID
from t
where ([Value] = 'A05' and AttributeNameId = 2)
or ([Value] = 'B70' and AttributeNameId = 3)
or ([Value] = 'C15' and AttributeNameId = 4)
group by ArID
having count(distinct ArID)=3
31 май 13, 10:20    [14373988]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Тогда уж
select ArID
from t
where ([Value] = 'A05' and AttributeNameId = 2)
or ([Value] = 'B70' and AttributeNameId = 3)
or ([Value] = 'C15' and AttributeNameId = 4)
group by ArID
having count(distinct ArID)=3
Нет. Ерунду написал
31 май 13, 10:21    [14373992]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
with x as
(
 select
  ArID,
  Value,
  AttributeNameId,
  rank() over (order by Value, AttributeNameId) as r
 from
  t
)
select ArID
from x
where ([Value] = 'A05' and AttributeNameId = 2)
or ([Value] = 'B70' and AttributeNameId = 3)
or ([Value] = 'C15' and AttributeNameId = 4)
group by ArID
having count(distinct r)=3
31 май 13, 10:49    [14374164]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
cronwerk
Member

Откуда:
Сообщений: 8
а без
автор
=3
нельзя обойтись?
Я к тому что если кол-во параметров для условий варьируются, т.е. например 4
автор
where ([Value] = 'A05' and AttributeNameId = 2)
or ([Value] = 'B70' and AttributeNameId = 3)
or ([Value] = 'C15' and AttributeNameId = 4)
or ([Value] = 'I10' and AttributeNameId = 9)
31 май 13, 15:09    [14376296]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
cronwerk
Я к тому что если кол-во параметров для условий варьируются

Само по себе ?
31 май 13, 15:10    [14376306]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
cronwerk
Member

Откуда:
Сообщений: 8
Glory
Само по себе ?


нет, ползователем
31 май 13, 15:31    [14376459]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
cronwerk
нет, ползователем

Пользователь составляет текст запроса ?
31 май 13, 15:35    [14376494]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
cronwerk
Member

Откуда:
Сообщений: 8
Glory
Пользователь составляет текст запроса ?

Вы к чему клоните?
31 май 13, 15:38    [14376513]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
cronwerk
Вы к чему клоните?

Кто составляет текст запроса, то и должен прописывать туда нужные условия.
31 май 13, 15:41    [14376532]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
cronwerk
Member

Откуда:
Сообщений: 8
т.е. имеете ввиду что кроме самих параметров можно передавать и их кол-во?
Я в данный момент так и сделал, но может это не совсем корректно?
31 май 13, 15:45    [14376563]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
cronwerk
может это не совсем корректно?

Это корректно, не переживайте.
31 май 13, 15:46    [14376572]     Ответить | Цитировать Сообщить модератору
 Re: Выбор данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
cronwerk
т.е. имеете ввиду что кроме самих параметров можно передавать и их кол-во?

Нет
Вот вы дописали в текст запроса or ([Value] = 'I10' and AttributeNameId = 9)
будьте последовательны - допишите и count(distinct r)=4
31 май 13, 15:47    [14376575]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить