powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как сделать SQL-запрос
12 сообщений из 12, страница 1 из 1
Как сделать SQL-запрос
    #36188115
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть список продуктов, каждый состоит из ряда компонентов.
Tab_prod :
cod_prodname_prod1 name_12 name_2... ...
Tab_prod_cmpt :
cod_prodcod_cmpt1 L... ...N M
Как сделать SQL-запрос, чтобы иметь результирующий список продуктов, которые состоят только из (например, 2-х) определенных компонентов?
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #36188191
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку, не проверяя, как то так, хотя, могу и ошибаться...

Код: plaintext
1.
2.
3.
SELECT DISTINCT p.cod_prod, p.name_prod
FROM Tab_prod p
    INNER JOIN Tab_prod_cmpt c ON c.cod_prod = p.cod_prod
WHERE c.cod_cmpt IN (cod1, cod2, ..., codN)
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #36188638
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkarНавскидку, не проверяя, как то так, хотя, могу и ошибаться...

Код: plaintext
1.
2.
3.
SELECT DISTINCT p.cod_prod, p.name_prod
FROM Tab_prod p
    INNER JOIN Tab_prod_cmpt c ON c.cod_prod = p.cod_prod
WHERE c.cod_cmpt IN (cod1, cod2, ..., codN)

А если требуется чтобы в каждом выбранном продукте были все указанные компоненты, то так:
Код: plaintext
1.
2.
3.
4.
5.
SELECT p.cod_prod, p.name_prod
FROM Tab_prod p
    INNER JOIN Tab_prod_cmpt c ON c.cod_prod = p.cod_prod
WHERE c.cod_cmpt IN (cod1, cod2, ..., codN)
GROUP BY p.cod_prod, p.name_prod
HAVING COUNT(c.cod_cmpt) = N 
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #36192732
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варианты выше, не подходят.
Стоит задача подбора точного аналога. Т.е. Если продукт состоит из двух компонентов, то надо найти в списке продуктов только те продукты, которые состоят только из этих двух компонентов (без каких либо ещё).
А предложенные варианты выводят кроме нужных продуктов и те, в которых кроме указанные в качестве параметров есть и другие компоненты.
Например, только те в которых одновременно есть Fe и Cu. Т.е. варианты Fe+X, Cu+X, Fe+Cu+X...+Y - неподходят.
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #36192774
sPaul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT p.cod_prod, p.name_prod
FROM Tab_prod p
    INNER JOIN Tab_prod_cmpt c ON c.cod_prod = p.cod_prod
--WHERE c.cod_cmpt IN (cod1, cod2, ..., codN)
GROUP BY p.cod_prod, p.name_prod
--HAVING COUNT(c.cod_cmpt) = N 
HAVING sum(case when c.cod_cmpt IN (cod1, cod2, ..., codN) then  1  else - 1  end) = N
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #36192786
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISА предложенные варианты выводят кроме нужных продуктов и те, в которых кроме указанные в качестве параметров есть и другие компоненты.
Например, только те в которых одновременно есть Fe и Cu. Т.е. варианты Fe+X, Cu+X, Fe+Cu+X...+Y - неподходят.
Да, действительно - не внимательно прочитал, сорри.
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #36192870
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sPaul ,
большое спасибо, получилось, это то что нужно.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как сделать SQL-запрос
    #39373093
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошли годы и вот опять та же задача:
AISЕсть список продуктов, каждый состоит из ряда компонентов.
Tab_prod :
cod_prodname_prod1 name_12 name_2... ...
Tab_prod_cmpt :
cod_prodcod_cmpt1 L... ...N M
Как сделать SQL-запрос, чтобы иметь результирующий список продуктов, которые состоят только из (например, 2-х) определенных компонентов?
Спасибо sPaul , его пример сработал.
sPaul
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT p.cod_prod, p.name_prod
FROM Tab_prod p
    INNER JOIN Tab_prod_cmpt c ON c.cod_prod = p.cod_prod
--WHERE c.cod_cmpt IN (cod1, cod2, ..., codN)
GROUP BY p.cod_prod, p.name_prod
--HAVING COUNT(c.cod_cmpt) = N 
HAVING sum(case when c.cod_cmpt IN (cod1, cod2, ..., codN) then 1 else -1 end) = N


Сейчас появились изменения в таблице связей, в которую введен столбец - количество отдельного компонента в продукте.
Код: sql
1.
2.
3.
4.
5.
6.
Tab_prod_cmpt:
[CSV]cod_prod,cod_cmpt, count_cmpt
1, L, 26
..., ...
N, M, 51
[/CSV]


И теперь появилось доп. условие: надо иметь результирующий список продуктов, которые состоят НЕ только из (например, 2-х) определенных компонентов как ранее, НО и содержат их в соответствующих одинаковых количествах.

Т.е. например:
1.Товар1 состоящий из Компонент1(100шт.)+Компонент2(50шт.)
2.Товар2 состоящий из Компонент1( 101 шт.)+Компонент2(50шт.)
3.Товар3 состоящий из Компонент1(100шт.)+Компонент2(50шт.)
4.Товар4 состоящий из Компонент1(100шт.)+Компонент2( 51 шт.)

Ранее вывело бы все 4-е товара, а сейчас должно вывести только 1 и 3.

Как изменить запрос, который ранее работал, с учетом нового условия?
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #39373561
dya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dya
Гость
Прошу прощения, что не к месту вопрос, но так как тему мне заводить нельзя - пишу сюда. Как завязаться на событие скролинга в VTrackBar PB11 при помощи колеса мыши? Листается, но код обработчика привязать не знаю куда, чтобы реакцию назначить на это событие. Прошу понимания и помощи.
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #39374917
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

Посмотрите, может то, все не прогонял (наверное можно и оптимизнуть и по скорости и по скрипту):


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
declare  @Tab_prod table (cod_prod int ,name_prod varchar(400))
insert into @Tab_prod values (1,'name_1')
insert into @Tab_prod values (2,'name_2')
insert into @Tab_prod values (3,'name_3')

declare @Tab_prod_cmpt table (cod_prod int, cod_cmpt varchar(10) , count_cmpt int)
insert into @Tab_prod_cmpt values(1,1,100)
insert into @Tab_prod_cmpt values(1,2,50)
insert into @Tab_prod_cmpt values(2,1,101)
insert into @Tab_prod_cmpt values(2,2,50)
insert into @Tab_prod_cmpt values(3,1,100)
insert into @Tab_prod_cmpt values(3,2,50)
insert into @Tab_prod_cmpt values(4,1,100)
insert into @Tab_prod_cmpt values(4,2,50)
insert into @Tab_prod_cmpt values(4,2,52)

;with t as 
(
select t1.cod_prod, row_number()  over(PARTITION BY t1.cod_prod order by t1.cod_cmpt , t1.count_cmpt) as rw 
, (select count(*) from @Tab_prod_cmpt as t2 where t2.cod_prod = t1.cod_prod) as coun
,t1.cod_cmpt , t1.count_cmpt
from @Tab_prod_cmpt as t1
)


, tt as 
(
select * from t as t1
where exists ( select 1 from t as t2
               where t1.cod_prod <> t2.cod_prod
			   and   t1.coun = t2.coun
			   and   t1.cod_cmpt = t2.cod_cmpt and t1.count_cmpt = t2.count_cmpt 
			   and   t1.rw = t2.rw
			  ) 
)

-- Вывод
select distinct t1.cod_prod , 
(select name_prod from @Tab_prod where cod_prod = t1.cod_prod) as name_prod
from tt as t1 
where t1.coun = (select count(*) from tt as t3 where t3.cod_prod = t1.cod_prod)
and exists (select 1 from tt as t2 where 
             t2.coun = (select count(*) from tt as t4 where t4.cod_prod = t2.cod_prod)   
             and t2.cod_prod <> t1.cod_prod
             and t1.rw         = t2.rw
			 and t1.cod_cmpt   = t2.cod_cmpt 
			 and t1.count_cmpt = t2.count_cmpt
            ) 
 



...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #39375117
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medoed ,
спасибо, что откликнулись, буду пробовать.
...
Рейтинг: 0 / 0
Как сделать SQL-запрос
    #39376581
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dyaПрошу прощения, что не к месту вопрос, но так как тему мне заводить нельзя - пишу сюда. Как завязаться на событие скролинга в VTrackBar PB11 при помощи колеса мыши? Листается, но код обработчика привязать не знаю куда, чтобы реакцию назначить на это событие. Прошу понимания и помощи.
Попробуйте использовать события lineup и linedown
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как сделать SQL-запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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