Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1323383529
Wadimkas
2011-12-09 02:32
2012.03.25
Как прибить камандами компилятора ошибки


2-1323679506
Handle
2011-12-12 12:45
2012.03.25
множества


2-1323420041
bestolkov
2011-12-09 12:40
2012.03.25
Отображение графики


15-1322655766
Тут был я
2011-11-30 16:22
2012.03.25
Ввод тел. номера в Вебмани.


2-1323120597
mnj
2011-12-06 01:29
2012.03.25
Использование TFileStream для текста и бинарного файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский