Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: CL | DM;

Вниз

сложный 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
2-1221758923
MZG
2008-09-18 21:28
2008.10.26
Как подсчитать в цикле?


3-1208347832
Анна
2008-04-16 16:10
2008.10.26
Какие нужно дать права на создание ХП


15-1220494565
Slider007
2008-09-04 06:16
2008.10.26
С днем рождения ! 4 сентября 2008 четверг


11-1194649488
Эдик
2007-11-10 02:04
2008.10.26
Модули для работы с файлами 3D Studio Max.


15-1220190358
Синий Дракон
2008-08-31 17:45
2008.10.26
Логическая задача