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

Откуда:
Сообщений: 4
Есть таблица с чеками, примерно следующего содержания:

НомерЧека, ДатаТайм, КодТовара, ИмяТовара

(100200, '20111022 10:56:00', '000558855', 'Соль')

Как мне выбрать номера чеков, в которых только нужный мне набор товаров?
Например:

(100200, '20111022 10:56:00', '000558855', 'Сахар')
(100200, '20111022 10:56:00', '000558855', 'Рыба')
(100200, '20111022 10:56:00', '000558855', 'Одеколон')


(100205, '20111022 11:56:00', '000558855', 'Сахар')
(100205, '20111022 11:56:00', '000558855', 'Одеколон')
(100205, '20111022 11:56:00', '000558855', 'Рыба')
(100205, '20111022 11:56:00', '000558855', 'Рыба')
22 окт 11, 09:51    [11482869]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
JerryB
Member

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

коды товаров отличаются конечно :D
забыл изменить
22 окт 11, 09:55    [11482874]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
Sekoka
Member

Откуда:
Сообщений: 73
SELECT НомерЧека
FROM Товар
WHERE ИмяТовара IN ('Сахар','Рыба','Одеколон')
22 окт 11, 11:14    [11482943]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Sekoka,

А подумать?
22 окт 11, 11:42    [11482970]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
на пример
Guest
JerryB,

групбай НомерЧека с подсчетом количества присутствующих в чеке искомых товаров.
22 окт 11, 12:14    [11482996]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
JerryB
Member

Откуда:
Сообщений: 4
Sekoka,
Неа, так выбирутся чеки в которых может быть только один из указанных товаров
или чеки с нужным товаром + не нужными товарами.

pkarklin, помогите пожалуйста, очень нужно.

Guest,
Не совсем понятно. Можно пример пожалуйста такого запроса?
Товаров в чеке может быть сколько угодно, но товар должен быть только тот, который мне нужен, и обязательно хоть одна штука каждого товара.
22 окт 11, 12:20    [11483004]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
Flying Dutchman
Member

Откуда: Arnhem, Голландия
Сообщений: 196
JerryB
Есть таблица с чеками, примерно следующего содержания:

НомерЧека, ДатаТайм, КодТовара, ИмяТовара

(100200, '20111022 10:56:00', '000558855', 'Соль')

Как мне выбрать номера чеков, в которых только нужный мне набор товаров?
Например:

(100200, '20111022 10:56:00', '000558855', 'Сахар')
(100200, '20111022 10:56:00', '000558855', 'Рыба')
(100200, '20111022 10:56:00', '000558855', 'Одеколон')


(100205, '20111022 11:56:00', '000558855', 'Сахар')
(100205, '20111022 11:56:00', '000558855', 'Одеколон')
(100205, '20111022 11:56:00', '000558855', 'Рыба')
(100205, '20111022 11:56:00', '000558855', 'Рыба')


Можно использовать реляционное деление. См. статью Джо Селко.
22 окт 11, 12:46    [11483026]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
ё
Guest
SELECT НомерЧека
FROM Товар
WHERE ИмяТовара IN ('Сахар','Рыба','Одеколон')
group by НомерЧека
having count(distinct ИмяТовара)=3
22 окт 11, 13:06    [11483046]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
_anybody
Guest
ё,

Тогда уж так
SELECT НомерЧека
FROM Товар
LEFT JOIN (
SELECT НомерЧека
FROM Товар
WHERE ИмяТовара NOT IN ('Сахар','Рыба','Одеколон')
GROUP BY НомерЧека
) T(n) ON T.n = Товар.НомерЧека
WHERE T.n IS NULL
group by НомерЧека
having count(distinct ИмяТовара)=3
Хотя мне все-равно не нравится count(distinct)
22 окт 11, 14:04    [11483127]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать чеки только с определённым набором товаров  [new]
JerryB
Member

Откуда:
Сообщений: 4
_anybody,
Все работает! Спасибо!
А чем не нравится count(distinct)? Скоростью работы?
22 окт 11, 14:52    [11483181]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить