Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2012, 21:05   #11
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Пива поставишь если встретиться прийдётся
два!
только на T1 в подзапросе ругается
Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
SELECT T1.groupid
  FROM Table1 T1
  WHERE (
    SELECT COUNT(*) FROM
      (SELECT T2.itemid
         FROM Table1 T2
         WHERE T2.groupid=T1.groupid AND T2.itemid IN (1,2,6,8,9)
         GROUP BY T2.itemid) X) = 5
  GROUP BY T1.groupid
Код:
 Unknown column 'T1.tradeid' in 'where clause'
Pamparam вне форума Ответить с цитированием
Старый 05.06.2012, 21:47   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Лови такой изврат, скорее всего проще можно, чет под вечер голова не варит
Код:
SELECT T1.groupid
  FROM Table1 T1,
    (SELECT groupid,COUNT(*) AS CountRec
       FROM (SELECT groupid,itemid
         FROM Table1
         WHERE itemid IN (1,2,6,8,9)
         GROUP BY groupid,itemid)
       GROUP BY groupid) U
  WHERE T1.groupid=U.groupid AND U.CountRec=5
  GROUP BY T1.groupid
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2012, 22:11   #13
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

После
GROUP BY groupid,itemid) алиас просило - добавил
Но выбирает тот groupid, где есть "2,2,3,3" только когда U.CountRec=2
Код:
   WHERE itemid IN (2,2,3,3)  
..
U.CountRec=2
Результат: groupid(2,2,3,3)
при (2,3) из того же groupid (где 2,2,3,3) при U.CountRec=2 тот же результат
Код:
   WHERE itemid IN (2,3)   
..
U.CountRec=2
Результат: groupid(2,2,3,3)
т.е. считает уникальные вхождения, а мне надо как-то сообразить чтобы считало каждое из них. Наверное через IN не прокатит. Ладно, попробую сам что-нить придумать или БД придется перестраивать. Спасибо

Последний раз редактировалось Pamparam; 05.06.2012 в 22:18.
Pamparam вне форума Ответить с цитированием
Старый 05.06.2012, 22:16   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Результат: groupid(2,2,3,3)
Не может так вернуть, в конце GROUP BY стоит
Цитата:
WHERE itemid IN (2,2,3,3)
Это то же самое, что IN (2,3)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2012, 22:23   #15
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

tradeid это groupid
Pamparam вне форума Ответить с цитированием
Старый 05.06.2012, 22:32   #16
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не может так вернуть, в конце GROUP BY стоит
Это то же самое, что IN (2,3)
не допоняли наверное друг-друга... то не так вернуло, а такие результаты в БД находятся =)
Pamparam вне форума Ответить с цитированием
Старый 05.06.2012, 22:45   #17
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Нельзя как-то в IN всунуть точные значения, чтобы при itemid (1,2,2,3,3,3) получалось 6 строк?
Pamparam вне форума Ответить с цитированием
Старый 05.06.2012, 22:50   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не прокатит. Возможно структуру менять, или действительно, как в посте #7 несколько запросов с промежуточными таблицами. Как - не думал. Еще вариант запрос + программно результат доработать если есть возможность
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2012, 23:03   #19
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Pamparam
Код:
SELECT groupid
FROM test
WHERE itemid IN (1,3)
GROUP BY groupid
HAVING count(distinct itemid) = 2
вроде все чотко
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 05.06.2012 в 23:18.
pproger вне форума Ответить с цитированием
Старый 05.06.2012, 23:46   #20
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Четко =), но мне нужно учитывать наличие каждого itemid, не отбрасывая повторы.
для проверки groupid, содержащего 2,2,3,3 досообразил такое:
Код:
SELECT tradeid,count(*) as co
FROM tradeitems t1
WHERE t1.itemid IN (2,2,3,3) 
GROUP BY t1.groupid
HAVING count(distinct itemid) = 2 
and  count(itemid) = 4 and (SELECT count(id) FROM tradeitems T2 WHERE T2.groupid=T1.groupid AND T2.itemid=2)=2 and (SELECT count(id) FROM tradeitems T2 WHERE T2.groupid=T1.tradeid AND T2.groupid=3)=2;
т.е. где кол-во повторений > 1 - делать проверку с подзапросом
pproger, Аватар - благодарю! ) Думаю, проще не получится.
Pamparam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сводная по отфильтрованным значениям getikalex Microsoft Office Excel 24 03.11.2011 10:42
Разбиение строки по значениям artemavd Общие вопросы Delphi 7 11.11.2010 09:51
Вопрос по диапазонам и значениям PashaNastya Microsoft Office Excel 3 25.03.2010 09:28
Переход от ссылок к значениям! mephist Microsoft Office Excel 5 10.07.2009 16:01
Нарисовать Ellipse по значениям из... Apollo_13 Общие вопросы Delphi 3 17.06.2007 02:53