Syncsort Sum Fields= Нет, не удаляет дубликаты

Я пытаюсь запустить задание SYNCSORT, которое удалит дублирующиеся записи, и когда я его запускаю, я все еще получаю дубликаты. Ниже приведен код SYNCSORT, который я использую:

INCLUDE COND=(((61,1,CH,EQ,C'P'),OR, 
              (61,1,CH,EQ,C'V')),AND,
              (8,2,CH,EQ,C'FL'))     
OUTREC FIELDS=(1:12,20,              
               30:36,20,             
               55:61,1)              
SORT FIELDS=(30,20,CH,A,             
             01,20,CH,A)             
SUM FIELDS=NONE                      

Вход выглядит следующим образом:

----+----1----+----2----+----3----+----4----+----5----+----6
      FL                           AMELIA CITY              
32034 FL  NASSAU                  FERNANDINA BEACH         P
32034 FL  NASSAU                  AMELIA CITY              V
32034 FL  NASSAU                  AMELIA ISLAND            S
32034 FL  NASSAU                  FERNANDINA               S

Я получаю большую часть ожидаемого результата, за исключением того, что я все еще получаю дубликаты. У меня есть следующий вывод:

----+----1----+----2----+----3----+----4----+----5----+
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADINGTON               V
POLK                         BRADLEY                  P
HILLSBOROUGH                 BRANDON                  P
SUWANNEE                     BRANFORD                 P
MIAMI-DADE                   BRICKELL                 V

Буду признателен за любую помощь, так как я не могу найти свою ошибку.

2 ответа

Решение

Это то, что вы суммируете на:

< ------------ Sort Field ----------------------->  
----+----1----+----2----+----3----+----4----+----5----+----6
      FL                           AMELIA CITY              
32034 FL  NASSAU                  FERNANDINA BEACH         P
32034 FL  NASSAU                  AMELIA CITY              V
32034 FL  NASSAU                  AMELIA ISLAND            S
32034 FL  NASSAU                  FERNANDINA               S

Дубликаты записей будут отличаться в первых 11 байтах, которые вы не видите. Попробуйте удалить outrec, чтобы проверить.

Возможные изменения -

  • Измените outrec на inrec
  • перекодировать сортировку с полями, связанными с выводом, см. следующее:

Следующие сортировки сортируются на основе выходных записей:

INCLUDE COND=(((61,1,CH,EQ,C'P'),OR, 
               (61,1,CH,EQ,C'V')),AND,
              (8,2,CH,EQ,C'FL'))     
OUTREC FIELDS=(1:12,20,              
              30:36,20,             
              55:61,1)              
SORT FIELDS=(42,20,CH,A,             
             12,20,CH,A)             
SUM FIELDS=NONE

Неважно, в каком порядке вы кодируете различные этапы "сортировки", они будут выполняться в том порядке, который хочет SORT.

В вашем случае это будет INCLUDE, затем SORT, затем SUM, затем OUTREC, Вы можете проверить, что это так, полностью перевернув контрольные карты, вы получите идентичный выход.

Если вы хотите сделать что-то перед сортировкой, вы используете INREC, а не просто попытаться найти OUTREC перед оператором SORT. Здесь, поскольку вы сортируете, вы хотите включить только те данные, которые вам нужны. Вы не хотите включать интервал для форматирования. Почему вы хотите загрузить свой файл в SORT с дополнительными идентичными данными в каждой записи?

На INREC и OUTREC, пожалуйста, не используйте FIELDS, На OUTFIL пожалуйста, не используйте OUTREC, Должно быть очевидно, что FIELDS "перегружен" (посмотрите, сколько раз вы использовали FIELDS, и посмотрите, сколько "одинаковых"), а OUTREC "перегружен". Более 10 лет назад BUILD был введен, чтобы сделать вещи намного понятнее - он описывает, что он делает, и каждый раз, когда вы видите BUILD, это означает только BUILD.

 INCLUDE COND=(((61,1,CH,EQ,C'P'), 
                OR, 
                (61,1,CH,EQ,C'V')),
               AND, 
                (8,2,CH,EQ,C'FL')) 
 INREC BUILD=(36,20, 
              12,20, 
              61,1) 
 SORT FIELDS=(1,40,CH,A) 
 OUTREC BUILD=(21,10, 
               10X, 
               1,20, 
               5X, 
               41,1) 

INREC выбирает только те данные, которые вы хотите, и в порядке, в котором вам нужно указать только один ключ SORT.

Затем OUTREC форматирует данные так, как вы хотите. Для каждой записи в сортировке было сохранено 15 байтов (пробелы). 10X 10 пробелов, 5X - пять пробелов.

Обратите внимание, что это намного легче, кодировать и понимать, и, следовательно, более легко обслуживать, если вы включаете "явные" пробелы, а не неявные с использованием номеров столбцов. 10 столбцов отчета и интервалы между столбцами 1 и 2 неверны. Вы хотите изменить все ссылки на столбцы, просто добавить один дополнительный пробел, или вы бы предпочли изменить 7X на 8X, а остальное сработает само? Даже если вам нравятся утомительные перемены, помните своих коллег:-)

Если ваши данные уже в порядке , не используйте SUM FIELDS = NONE. Используйте функции отчетов OUTFIL, REMOVECC, NODETAIL а также SECTIONS с TRAILER3, НИКОГДА не сортируйте данные только для того, чтобы удалить дубликаты с SUM FIELDS=NONE,

Другие вопросы по тегам