![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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  | 
| 
		 
			 
			#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;  | 
| 
		 
			 
			#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 (' '' '); //выведет ' | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 ![]() А вот что действительно потенциальную ошибку может вызвать так это вот эта запись, особенно если база на Акцесе: Код: 
	'WHERE NK.Data between "'+DateToStr(DateTimePicker1.Date)+'" and "'+DateToStr(DateTimePicker2.Date)+'" '+ Последний раз редактировалось Страдалецъ, 11.06.2009 в 13:24.  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 А! А до меня допёрло. По case вы добавляете ещё один WHERE, а насколько я понял, надо писать AND. Хех, я смотрю, все ступили... 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 |