Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Внизсложный sql запрос!!! Найти похожие ветки
← →
kate158 (2008-09-18 11:18) [0]Здравствуйте,мастера!Помогите,пожайлуйста, решить такую задачу.На форме есть 2 dbgrid"a,кнопка Расчет.К БД (MSSQL Server)подключаюсь через ADO.В первой таблице (Объем)такие данные:
день_месяц_год_объем
10____8____8__20000
15____8____8__50000
Во второй (Коэффициенты)такие:
день_месяц_год_час___коэффиц
01____8_____8__00-01__0,245
02____8_____8__01-02__0,5
03____8_____8__02-03__0,57
04____8_____8__03-04__0,96
05____8_____8__04-05__0,841
06____8_____8__05-06__0,85
07____8_____8__06-07__0,64
08____8_____8__07-08__0,56
09____8_____8__08-09__0,782
10____8_____8__09-10__0,65
11____8_____8__10-11__0,587
.._____..____..__........__0,562
В таблицу Объем данные могут добавляться.При выборе кнопки Расчет должно происходить умножение Объема на коэффиц.Если в Объем снова добавляются данные,должно происходить умножение,но только с той даты,которая добавлена в таблицу Объем.Как это реализовать?У кого-нибудь есть идеи?
← →
clickmaker © (2008-09-18 11:27) [1]select v.date, v.volume * c.coeff
from volume v
inner join coeff c on v.date = c.date
where v.date >= @last_added_date
← →
Труп Васи Доброго © (2008-09-18 11:39) [2]Ничего не понял. Ты попробуй по русски спросить, а то я по албански не понимаю. А лучше на примерах. Глядишь в процессе объяснения и сам врубишься как что делать.
← →
kate158 (2008-09-18 11:57) [3]ОК,постараюсь.Запускаем прогу.Видим:
1 грид(имя таблицы в базе Объем)
день_месяц_год_объем
01____8____8__2
2грид(имя таблицы в базе Коэффициенты)
день_месяц_год__час___коэффиц_Произведение
01____8_____8__00-01____1________2(объем*коэффиц)
02____8_____8__01-02____2________4
03____8_____8__02-03____3________6
04____8_____8__03-04____4________8
05____8_____8__04-05____5________10
06____8_____8__05-06____6________12
07____8_____8__06-07____7________14
08____8_____8__07-08____8________16
09____8_____8__08-09____9________18
10____8_____8__09-10____10_______20
Кнопка Расчет.
Добавляем данные в таблицу Объем.Выбираем кнопку Расчет.Видим:
1 грид
день_месяц_год_объем
01____8____8__2
05____8____8__4
2грид
день_месяц_год__час___коэффиц_Произведение
01____8_____8__00-01____1________2(объем*коэффиц)
02____8_____8__01-02____2________4
03____8_____8__02-03____3________6
04____8_____8__03-04____4________8
05____8_____8__04-05____5________20(новое значение объема*коэффиц)
06____8_____8__05-06____6________24
07____8_____8__06-07____7________28
08____8_____8__07-08____8________32
09____8_____8__08-09____9________36
10____8_____8__09-10____10_______40
Уф.Надеюсь Вы меня поняли.С @last_added_date почему то не работает.
← →
clickmaker © (2008-09-18 12:05) [4]> С @last_added_date почему то не работает
а как ты ее задаешь?
← →
Sergey13 © (2008-09-18 12:13) [5]select v.date, v.volume * (select coeff from coeff where data = (select min(date) from coeff c where c.date>=v.date ))
from volume v
если не запутался, то как-то так можно попробовать
> день_месяц_год
> 01____8____8
Это разные поля?
← →
kate158 (2008-09-18 12:35) [6]
> Sergey13 © (18.09.08 12:13) [5]
с таким запросом получается 2 строки,а нужно 10(в таблице)!!
← →
clickmaker © (2008-09-18 12:51) [7]> с таким запросом получается 2 строки,а нужно 10(в таблице)
> !!
и что? не сообразить?
делай селект из второй таблице, связывая с первой
← →
Труп Васи Доброго © (2008-09-18 14:02) [8]То ли лыжи не едут, то ли я чёт не понял.
Откуда берётся время? Оно изначально задано? Ну фиг с ним, не суть. Суть в том, что поле "Произведение" вообще лишнее, его не лоджно быть в таблице "Коэффициенты"
Нужно сделать Вью. И будет всё хорошо. Только опять таки как связать без времени??? Если в таблице "Объёмы" времени нет, то фиг чё без ХП у тебя получится, ибо Join свяжет со всеми записями за указанную дату, а не с одной. Т е.
Или тебе и надо умножать все записи за весь день одновременно? Или за одну дату есть только один рабочий час?
ДАВАЙ ПОЯСНЕНИЯ!!!
Если за один день есть только одна запись в "Коэффициентах", тогда вьюшку можно делать (хотя тогда не ясно - нафига засорять таблицу не значащим полем - курить нормализацию). Если записей за один день много, то делай ХП и не парь людям мозг.
← →
kate158 (2008-09-18 14:51) [9]
> Труп Васи Доброго © (18.09.08 14:02) [8]
поле "Произведение" можно добавить в другой грид,допустим с названием Расчет.Вот мои действия:
1.Если в таблице Объем одна запись,допустим добавили значение объема 01.08.08,я это значение объема умножаю на ВСЕ коэффиц(с 1 по конец месяца).Далее.Добавили снова запись в таблицу Объем 5.08.08,я умножаю значение объема,ктр добавил пользователь 5.08.08 на коэффиц начиная уже с 5.08.08,причем те значения,ктр расчитаны с 01.08.08 по 5.08.08 я не трогаю.Далее.Пользователь добавил третью запись в таблицу Объемы,допустим 10.08.08.я умножаю значение объема,ктр добавил пользователь 10 числа на коэффиц начиная с 10.08.08 по конец месяца, расчитанные значения до 10.08.08 я оставляю без изменений.В третьем посте наглядный пример.Можно обойтись без ХП?Извините,что "парю мозг",самостоятельно разобраться не могу..
← →
sniknik © (2008-09-18 15:38) [10]> с таким запросом получается 2 строки,а нужно 10(в таблице)!!
ну так надо за основную брать ту в которой 10 строк а не 2
и можно немного поправить... так к примеруSELECT [Дата],[Коефф], [Коефф] * (SELECT TOP 1 [Коефф] FROM [Обьем] o WHERE k.[Дата] >= o.[Дата] ORDER BY o.[Дата] DESC) AS [Произведение] FROM [Коэффициенты] k
> Можно обойтись без ХП?
практически всегда... в общем процедуры и нужны то гдето в 2-3% случаев от того обьема когда их вообще делают. (маньяки процедурные... ;о))
← →
kate158 (2008-09-18 15:38) [11]
> clickmaker © (18.09.08 12:51) [7]
не могу догнать по какому полю нужно связать вторую таблицу(GOR) с первой(VOL)?
вот кодselect v.Day, v.Volume * (select Koef from GOR where Day = (select min(Day) from GOR c where c.Day>=v.Day ))Proizv
from VOL v
inner join GOR c on c.Day = v.Day
← →
kate158 (2008-09-18 15:59) [12]
> sniknik © (18.09.08 15:38) [10]
ок.так получается 10 записей.Но в поле "Произведение"-2 записи(т.к.2 записи в таблице Объем),а должно быть 10.Если смотреть 3 пост,получилось что со 02.08.08 по 04.08.08 и с 06.08.08 по 10.08.08 в записях хранятся значения - null,хотя должны хранится числа..
← →
sniknik © (2008-09-18 20:27) [13]> в записях хранятся значения - null,хотя должны хранится числа..
потомучто творческий копи-паст внес искажения в запрос... в условие видимо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c