![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
запрос
fifo © (2002-12-23 11:41:00)Помогите, плиз, составить запрос, возвращающий в указ. диапазоне дат, дату каждого дня месяца, даже если для нее нет записей в таблице и соотв. ей поле. Например:
tab1:
03.01.2002 134
06.01.2002 22
... ...
31.12.2002 11
Вернуть с 01.01.2002 по 31.12.2002:
01.01.2002 0
02.01.2002 0
03.01.2002 134
... ...
31.12.2002 11
Mirovodin (2002-12-23 13:16:00) [1]Можно конечно, для нагладности так написал написал.
MsGuns (2002-12-23 13:09:00) [2]>Mirovodin © (23.12.02 13:01)
А что, разве нельзя 2 по сто в ОДИН стакан ? Ну в смысле заполнение счетчика оформить в инсерте ?
Mirovodin (2002-12-23 13:01:00) [3]Для SQL :
Declare @D1 datetime -- дата начала отсчета, например 01.01.2002
Declare @Count int -- кол-во дней от даты, например 30
Declare @I int -- счетчик
SET @I=0
CREATE TABLE #TEMP (ADate DateTime, ACount int)
WHile @Count>0
BEGIN
INSERT #TEMP (ADate, ACount, AProc) VALUES (@D1+@I, 0)
SET @I=@I+1
SET @Count=@Count-1
END
На выходе имеем таблицу :
ADate ACount int
01.01.2002 0
02.01.2002 0
...
Потом делаем :
UPDATE #Temp SET ACount=(Select Count(*) FROM XXX WHERE XXX)
SELECT * FROM #Temp
DROP TABLE #Temp
MsGuns (2002-12-23 12:05:00) [4]
Procedure Form1.bbtGetAllDate(Sender: TObject);
var
dts,dte : Tdate;
begin
q.SQL.Clear;
q.SQL.Add("CREATE TABLE "TmpDate"");
q.SQL.Add(" (TmDate DATE) ");
try
q.Prepare;
q.ExecSQL;
except
ShowMessage("Сбой при выполнении запроса");
exit;
end;
dts := TDataTimePicker1.Date;
dte := TDataTimePicker2.Date;
q1.SQL.Clear;
q1.SQL.Add("SELECT * FROM "TmpDate");
q1.RequestLive := true;
try
q.Prepare;
q.Open;
except
ShowMessage("Сбой при выполнении запроса");
exit;
end;
with q1 do
while dts<=dte do
begin
Append;
Fields[0].AsDate := dts;
Post;
dts := dts+1;
end;
q1.FlushBuffers;
q1.Close;
end;
fifo (2002-12-23 11:59:00) [5]Oracle
ЮЮ (2002-12-23 11:58:00) [6]БД назови, у всех разные возможности для изврата :-)
fifo (2002-12-23 11:52:00) [7]можно текст запроса, возвращающего последовательно все даты в указ. диапазоне?
ЮЮ (2002-12-23 11:50:00) [8]Невозможно сомтавить запрос, возвращающий записи, которых нет, не так ли? Надо каким либо образом создать набор, содержащий записи
01.01.02
...
31.01.02
и присоединиться к нему с помощью Left join
MsGuns (2002-12-23 11:46:00) [9]ИМХО, без вспомогательной таблицы, содержащую список записей с одним-единственным полем, куда тупо занести в цикле все даты нужного периода не обойтись.
Либо уже в результирующую опять же просмотром добавить "нулевые"
Можно еще решить создание врем. НД через генератор, если БД серверная.