powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите составить запрос
7 сообщений из 7, страница 1 из 1
Помогите составить запрос
    #32048501
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужен запрос который по номерам изделий в таблице
(planestrateg), в другой таблице (materials) выцепляет все записи относящиеся к изделиям (по номеру записи изделия в materials) в planestrateg что то типа: "where idxproduct in (select idxproduct from planestrateg)",
где idxproduct - номер записи в таблице изделий
(есть и в materials и в planestrateg)
и умножает количество каждого материала из таблицы материалов на количество изделия к которому он относится а затем полученное (одинаковые материалы в каждом из изделий)суммирует
Вот, составил запрос:
select t1.name,t2.name,t1.mcountreal*sum(t2.begincountproduct) from materials t1,planestrateg t2 where t1.idxproduct = 222 and t2.idxproduct =222 group by t1.name,t2.name,t1.mcountreal
который все вышеописанное делает но с одним изделием, а их много и нужно все одинаковые материалы просуммировать. Если написать ... where t1.idxproduct in (...) то суммируется неправильно. Может что то не так в group by?
...
Рейтинг: 0 / 0
Помогите составить запрос
    #32048570
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем ты название изделия выводишь, если тебе материаллы просуммировать надо?
Поля у тебя сильно сложно запомнить, так что идею только скажу. Напиши запрос из таблицы материалов (пусть например это таблица MAT) и для каждой записи считай сумму количеств изделий (пусть таблицы IZD) и умножай её на количество материалла из таблицы материаллов примерно так:
SELECT M.NAME,M.KOL*(SELECT SUM(I.KOL) FROM IZD I WHERE I.ID=M.ID)
FROM MAT M,
где KOL-количества, ID-код материалла.
По крайней мере, для суммирования материаллов по изделиям так сделать можно. А имя изделия тут бессмысленно выводить.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #32048571
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем ты название изделия выводишь, если тебе материаллы просуммировать надо?
Поля у тебя сильно сложно запомнить, так что идею только скажу. Напиши запрос из таблицы материалов (пусть например это таблица MAT) и для каждой записи считай сумму количеств изделий (пусть таблицы IZD) и умножай её на количество материалла из таблицы материаллов примерно так:
SELECT M.NAME,M.KOL*(SELECT SUM(I.KOL) FROM IZD I WHERE I.ID=M.ID)
FROM MAT M,
где KOL-количества, ID-код материалла.
По крайней мере, для суммирования материаллов по изделиям так сделать можно. А имя изделия тут бессмысленно выводить.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #32048722
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ты прав, старик. Имена изделий выводить бессмысленно.
Но, может быть я был не доконца корректен в постановке вопроса, но изделия у меня состоят из материалов а не наоборот и необходимо (по каждому изделию) умножить кол-во изделия в таблице planestrateg на количество каждого из принадлежащих ему материалов (таблица materials) и в конце просуммировать одинаковые материалы. Это так называемая потребность в материалах.
Если в виде формулы то:
IZD1*MAT1+IZD2*MAT1+IZD3*MAT1...
IZD1*MAT2+IZD2*MAT2+...
IZD1*MAT3
IZD1*MAT4+IZD5*MAT4
где все это как-бы записи в столбце с суммой произведений одинаковых материалов по всем изделиям
IZD это изделие, а MAT - материал
...
Рейтинг: 0 / 0
Помогите составить запрос
    #32048737
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я тебе что написал ? Вынеси кол-во материала за скобки и получишь:
MAT1*(IZD1+IZD2+IZD3+...)
MAT2*(IZD1+IZD2+...)
Запрос каждый материал перебирает и умножает его количество на сумму количеств этого материалла во всех изделиях. К тому-же этот запрос очень хорошо оптимизируется.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #32048824
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извини, но ты выбираешь все материалы из таблицы, а надо только те, которые есть в изделиях плана (planestrateg) и если к твоему запросу в конец дописать условие where M.ID in (select ID from planestrateg), то опять все неправильно работает,
при том что where M.ID = 222 (конкретно задать номер изделия из плана) все работает как надо.
Но все равно спасибо за заботу.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #32048872
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму я, как это оно не работает.
А вобще для проверки существования записи лучше используй where exists(select * from IZD I where I.ID=M.ID)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите составить запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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