Форум: "Прочее";
Текущий архив: 2012.03.25;
Скачать: [xml.tar.bz2];
ВнизПолучить отчет по подтверждению Найти похожие ветки
← →
Alex_C (2011-11-30 16:05) [0]В таблице есть записи содержащие данные по стране и по тому, каким способом подтвеждена (или не подтверждена данная страна) и каким образом подтверждена - бумага, электронным путем и т.п. Мне нужно получить итоговый отчет который бы содержал список всех стран + второе поле - подтвержнеие (причем не важно каким образом) или не подтверждение. Поля подтверждения - булевые. Есть ли возможность создать такой запрос? Если делать так
SELECT DISTINCT Country, CfmPaper, CfmElec...
количество записей для одной страны получается несколько. А мне нужно чтоб только одна была.
← →
Омлет © (2011-11-30 16:09) [1]GROUP BY
← →
Sergey13 © (2011-11-30 16:34) [2]> [0] Alex_C (30.11.11 16:05)
> и каким образом подтверждена - бумага, электронным путем и т.п.
> CfmPaper, CfmElec...
на каждое "и т.п." по полю? Может быть много подтверждений?
Если только одно подтверждение - прямо тут ссылку на СПРАВОЧНИК видов подтверждений. Если много - в отдельную таблицу эти ссылки вынести.
← →
Anatoly Podgoretsky © (2011-11-30 17:11) [3]> Alex_C (30.11.2011 16:05:00) [0]
Если есть колонки Страна и QSL то какая сложность.
Так одна и будет, если правильно напишешь запрос
← →
Anatoly Podgoretsky © (2011-11-30 17:18) [4]> Anatoly Podgoretsky (30.11.2011 17:11:03) [3]
Да и вопрос лучше задавать на форумк по твое СУБД, на не ДМ
← →
OW © (2011-11-30 17:32) [5]см
> GROUP BY
а проще если для понимая, то
SELECT DISTINCT Country, (CfmPaper or CfmElec or ...) as QQQ
← →
OW © (2011-11-30 17:40) [6]а правильно - [2] :)
← →
Компромисс (2011-11-30 17:48) [7]Если записей по каждой стране много, то непонятно, что должно быть в результате. Например, для одной страны могут быть и подтвержденные, и неподвержденные записи. И что тогда должно быть в рез-те?
← →
Anatoly Podgoretsky © (2011-11-30 20:55) [8]SELECT Country, Count(*) where ... GROUP BY Country ORDER BY ...
← →
Anatoly Podgoretsky © (2011-11-30 20:55) [9]Нечто подобное
← →
Alex_C (2011-11-30 20:59) [10]
> Например, для одной страны могут быть и подтвержденные,
> и неподвержденные записи. И что тогда должно быть в рез-
> те?
В результате должны остаться:
1. Если страна подтверждена - то только запись о том, что страна подтверждена.
2. Если не подтвеждена - запись что такая страна есть, но она не подтвеждена.
В результате сделал так - не знаю на сколько верно, но работать стало очень быстро.
Сначала запрос:
CommandText := "SELECT Country, BandADIF, Mode, SUM(" + S + ") AS QSL " +
"FROM " + LogName + " WHERE Country <> " + QuotedStr("") +
"GROUP BY Country, BandADIF, Mode ORDER BY Country ";
Active := True;
SUM(" + S + ") - вставляся нужные пользователю подтверждения - только бумага и/или еще какие. В результате запрос изначально один. А затем:
function GetCountryStatus(Call, Band, Mode: string): integer;
type
TCfmWkd = (cwNone, cwWkd, cwCfm);
var
BandFind, ModeFind: TCfmWkd;
CountryData: TCountryData;
begin
Result := COUNTRY_ERROR; // Такой страны нет
// Проверяем позывной на правильность
if (not CheckTrueCall(Call)) or
(not ValidADIFBand(Band)) or
(not ValidMode(Mode)) then
Exit;
CountryData := FindCall(Call);
if CountryData.MainPref = "" then
Exit;
Result := COUNTRY_NOT_NEED;
BandFind := cwNone;
ModeFind := cwNone;
if FLogDataSet.Locate("Country", CountryData.MainPref, []) then
begin
while (not FLogDataSet.Eof) and
(FLogDataSet.FieldByName("Country").AsString = CountryData.MainPref) do
begin
if (BandFind <> cwCfm) and
(FLogDataSet.FieldByName("BandADIF").AsString = Band) then
begin
if FLogDataSet.FieldByName("QSL").AsInteger < 0 then
BandFind := cwCfm;
if BandFind <> cwCfm then
BandFind := cwWkd;
end;
if (ModeFind <> cwCfm) and
(FLogDataSet.FieldByName("Mode").AsString = Mode) then
begin
if FLogDataSet.FieldByName("QSL").AsInteger < 0 then
ModeFind := cwCfm;
if ModeFind <> cwCfm then
ModeFind := cwWkd;
end;
if (BandFind = cwCfm) and (ModeFind = cwCfm) then
Break
else
FLogDataSet.Next;
end;
case BandFind of
cwNone: Result := Result or COUNTRY_NEW_BAND;
cwWkd : Result := Result or COUNTRY_NOT_CFM_BAND;
end;
case ModeFind of
cwNone: Result := Result or COUNTRY_NEW_MODE;
cwWkd : Result := Result or COUNTRY_NOT_CFM_MODE;
end;
end
else
Result := COUNTRY_NEW;
end;
Получилось что работает на несколько порядков быстрее, чем для каждой страны свой запрос делать.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2012.03.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c