Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.25;
Скачать: CL | DM;

Вниз

Получить отчет по подтверждению   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1323333273
TComponent
2011-12-08 12:34
2012.03.25
Вопрос про WinExec


15-1322653876
Jeer
2011-11-30 15:51
2012.03.25
TList vs TList<T>


2-1323495691
Gu
2011-12-10 09:41
2012.03.25
просьба проверить функцию


2-1323178100
1234567890
2011-12-06 17:28
2012.03.25
значение неинициализированной переменной целого типа


6-1253728722
kluben-hh
2009-09-23 21:58
2012.03.25
Правильное соединение клиента с сервером