Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1221580076
Грек
2008-09-16 19:47
2008.10.26
Отловить клик по Subitems у ListView


15-1220599042
noob_one
2008-09-05 11:17
2008.10.26
Как перенести Delphi на новую windows?


15-1218174240
TUser
2008-08-08 09:44
2008.10.26
Объявлена дата запуска LHC


6-1194609413
Muxau
2007-11-09 14:56
2008.10.26
ICS THttpCli


2-1221827778
Vlad Oshin
2008-09-19 16:36
2008.10.26
Вот так оптимизатор..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский