![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Ребята помогите пожалуйсто доработать запрос на приход/расход. Не получается задействовать начальную дату, конечную дату и наименование товара.
Формулировка запроса: Вывести перечень прихода и расхода введённой складской еденицы за введёный период, подсчитав общее количество прихода, расхода и сумму остатка на складе. БД весит более 97 кб поэтому не могу прикрепить её, а заливаю на дамп. http://dump.ru/file/2857750 |
#2
|
||||
|
||||
![]() ну во-первых: ехе-файлы в архивы никто не пакует.
во-вторых: в табл. "накладные" переименуй поле "Sum" - это слово является зарезервированным в-третьих, сам код (так как спешил - мог чего-то не заметить ... но сама идея верная): Код:
SELECT DISTINCT NK.N_naklad, NK.Data, NK.Kolvo_otpusk_tov, NK.Kolvo_prin_tov, NK.Sum_NDS, NK.Sum_s_NDS, ORG.Nazv_org, (SELECT COUNT(Kolvo_otpusk_tov) FROM nakladn, tovar WHERE tovar.Nazv LIKE 'Тапки домашние' AND nakladn.Nomenkl_nomer = tovar.Nomenkl_nomer) as kol_rashoda, (SELECT COUNT(Kolvo_prin_tov) FROM nakladn, tovar WHERE tovar.Nazv LIKE 'Тапки домашние' AND nakladn.Nomenkl_nomer = tovar.Nomenkl_nomer AND kolvo_prin_tov>0) as kol_priem FROM tovar TV, organiz ORG, nakladn NK WHERE NK.Data between '20.06.1991' and '20.04.1992' AND TV.Nazv LIKE 'Тапки домашние' AND NK.Nomenkl_nomer = TV.Nomenkl_nomer AND ORG.INN_org = NK.INN_org Поживу - увижу, Доживу - узнаю, Выживу - учту. ![]() [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
|||
|
|||
![]() Цитата:
Твой вариант запроса конечно работает, но только "домашних тапок" и заданых тобой дат. А как сделать его более универсальным? Чтобы самому можно было задавать и начальную дату, и конечную дату, и наименование товара через выпадающие списки на форме №13? |
#4
|
||||
|
||||
![]() где-то так:
Код:
Query4.Close; Query4.SQl.Text:='SELECT DISTINCT NK.N_naklad, NK.Data, NK.Kolvo_otpusk_tov, NK.Kolvo_prin_tov, '+ 'NK.Sum_NDS, NK.Sum_s_NDS, ORG.Nazv_org, '+ '(SELECT COUNT(Kolvo_otpusk_tov) FROM nakladn, tovar WHERE tovar.Nazv LIKE "'+DBLookupComboBox2.Text+'" '+ 'AND nakladn.Nomenkl_nomer = tovar.Nomenkl_nomer) as kol_rashoda, '+ '(SELECT COUNT(Kolvo_prin_tov) FROM nakladn, tovar WHERE tovar.Nazv LIKE "'+DBLookupComboBox2.Text+'" '+ 'AND nakladn.Nomenkl_nomer = tovar.Nomenkl_nomer AND kolvo_prin_tov>0) as kol_priem '+ 'FROM tovar TV, organiz ORG, nakladn NK '+ 'WHERE NK.Data between "'+DateToStr(DateTimePicker1.Date)+'" and "'+DateToStr(DateTimePicker2.Date)+'" '+ 'AND TV.Nazv LIKE "'+DBLookupComboBox2.Text+'" '+ 'AND NK.Nomenkl_nomer = TV.Nomenkl_nomer '+ 'AND ORG.INN_org = NK.INN_org'; Query4.Open; Поживу - увижу, Доживу - узнаю, Выживу - учту. ![]() [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#5
|
|||
|
|||
![]() Цитата:
Код:
procedure TForm13.Button1Click(Sender: TObject); begin datamodule1.Query4.Close; datamodule1.Query4.SQL.Clear; datamodule1.Query4.SQL.Append('SELECT DISTINCT NK.N_naklad, NK.Data, NK.Kolvo_otpusk_tov, NK.Kolvo_prin_tov, NK.Sum_NDS, NK.Sum_s_NDS, ORG.Nazv_org, '); datamodule1.Query4.SQL.Append('SELECT COUNT(Kolvo_otpusk_tov) FROM nakladn, tovar WHERE tovar.Nazv LIKE "'+DBLookupComboBox2.Text+'" AND nakladn.Nomenkl_nomer = tovar.Nomenkl_nomer) as kol_rashoda, '); datamodule1.Query4.SQL.Append('AND nakladn.Nomenkl_nomer = tovar.Nomenkl_nomer) as kol_rashoda, '); datamodule1.Query4.SQL.Append('(SELECT COUNT(Kolvo_prin_tov) FROM nakladn, tovar WHERE tovar.Nazv LIKE "'+DBLookupComboBox2.Text+'" '); datamodule1.Query4.SQL.Append('AND nakladn.Nomenkl_nomer = tovar.Nomenkl_nomer AND kolvo_prin_tov>0) as kol_priem '); datamodule1.Query4.SQL.Append('FROM tovar TV, organiz ORG, nakladn NK '); datamodule1.Query4.SQL.Append('WHERE NK.Data between "'+DateToStr(DateTimePicker1.Date)+'" and "'+DateToStr(DateTimePicker2.Date)+'" '); datamodule1.Query4.SQL.Append('AND TV.Nazv LIKE "'+DBLookupComboBox2.Text+'" '); datamodule1.Query4.SQL.Append('AND NK.Nomenkl_nomer = TV.Nomenkl_nomer '); datamodule1.Query4.SQL.Append('AND ORG.INN_org = NK.INN_org'); case form13.RadioGroup1.ItemIndex of -1: showmessage('Выберите тип запроса'); 0: begin datamodule1.Query4.SQL.Append('WHERE (Nakladn.Kolvo_prin_tov > 0)'); datamodule1.Query4.SQL.Append('AND (Nakladn.Kolvo_otpusk_tov = 0)'); end; 1: begin datamodule1.Query4.SQL.Append('WHERE (Nakladn.Kolvo_prin_tov = 0)'); datamodule1.Query4.SQL.Append('AND (Nakladn.Kolvo_otpusk_tov > 0)'); end; 2: begin datamodule1.Query4.SQL.Append('WHERE ((Nakladn.Kolvo_prin_tov >= 0)'); datamodule1.Query4.SQL.Append('OR (Nakladn.Kolvo_otpusk_tov >= 0))'); end; end; if form13.CheckBox1.Checked then if form13.DBLookupComboBox1.Text<>'' then begin datamodule1.Query4.SQL.Append('AND (Organiz.INN_org = :p_inn)'); datamodule1.Query4.ParamByName('p_inn').AsInteger:=form13.DBLookupComboBox1.KeyValue; end; datamodule1.Query4.Open; end; procedure TForm13.Button2Click(Sender: TObject); begin form13.Hide; form1.show; end; procedure TForm13.Button3Click(Sender: TObject); begin form13.RvProject1.Execute; end; |
#6
|
||||
|
||||
![]() Так... Выжимаю из себя всё, что знаю по SQL.
1: LIKE в SQL используется с % (иначе теряет смысл) Код:
select * from user where email like '%@mail.ru%' Код:
ShowMessage (' '' '); //выведет ' Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
||||
|
||||
![]() Цитата:
![]() А вот что действительно потенциальную ошибку может вызвать так это вот эта запись, особенно если база на Акцесе: Код:
'WHERE NK.Data between "'+DateToStr(DateTimePicker1.Date)+'" and "'+DateToStr(DateTimePicker2.Date)+'" '+ Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 11.06.2009 в 13:24. |
#8
|
||||
|
||||
![]() А! А до меня допёрло. По case вы добавляете ещё один WHERE, а насколько я понял, надо писать AND. Хех, я смотрю, все ступили...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |