SQL - Подавление дубликатов столбцов (не строк) для запроса - PullRequest
4 голосов
/ 20 апреля 2011

У меня есть запрос, который возвращает что-то вроде этого ...

Набор данных 1:

EFFECTIVE_DATE END_DATE DESC                            SUBPART

4/10/2011                  Dairy Products Processing           L
4/10/2011                  360 CMR 10.000   
4/1/2011       4/9/2011    Dairy Products Processing            A
4/1/2011       4/9/2011    Ferroalloy Manufacturing             A

Я ищу запрос, который возвращает этонабор данных, подобный этому ...

Набор данных 2:

   EFFECTIVE_DATE END_DATE  DESC                            SUBPART

    4/10/2011                 Dairy Products Processing           L
                             360 CMR 10.000 
    4/1/2011        4/9/2011   Dairy Products Processing           A
                               Ferroalloy Manufacturing         A

Обратите внимание, что повторяющиеся даты вступления в силу (4/10/2011 - {ноль} и 4/1/ 2011 - 4/9/2011) подавляются при дублировании.

Редактировать 1: В ответ на ответ @Justin Cave,

Ниже мой запрос объединен с ДжастиномШаблон пещеры.Это близко, но немного.Даты и описания кажутся немного перепутанными с тем, чем они должны быть (данные в наборе данных должны быть такими же, как в Набор данных 2: . Я думаю, что это может иметь какое-то отношение к моему заказуно я не уверен.

SELECT (CASE WHEN effective_date = prior_effective_date 
             THEN null
             ELSE effective_date
         END) effective_date,
       (CASE WHEN end_date = prior_end_date 
             THEN null
             ELSE end_date
         END) end_date,
       cfr_part_desc ,
       cfr_subpart
  FROM
    (SELECT c.effective_date,
            lag(c.effective_date) over (order by c.effective_date desc, cpl.cfr_part_desc asc) prior_effective_date,
            c.end_date,
            lag(c.end_date) over  (order by c.effective_date desc, cpl.cfr_part_desc asc) prior_end_date,
            cpl.CFR_PART_DESC as cfr_part_desc,
            cd.CFR_SUBPART as cfr_subpart
     from table1 c
      inner join table2 cd ON c.IND_ID = cd.IND_ID
                              AND cd.EFFECTIVE_DATE = c.EFFECTIVE_DATE
      inner join table3 cpl on cd.CFR_PART_L_S = cpl.CFR_PART_L_S 
      inner join table4 f on c.ind_id = f.ind_id
      inner join table5 p on f.ind_id = p.ind_id
    where p.PERMIT_S = '4988'
    order by c.effective_date desc, cpl.CFR_PART_DESC asc
    );

image

Редактировать 2: Неправильные данные были связаны с неоднозначным определением даты вступления в силу столбца.теперь работает правильно.

Ответы [ 2 ]

5 голосов
/ 20 апреля 2011

Я думаю, что вы ищете что-то подобное, используя аналитические функции. Мне непонятно, как упорядочен набор результатов, поэтому вам придется его заполнить. Возможно, вы также сможете объединить аналитическую функцию с вашим запросом, а не добавлять третий уровень вложенности.

SELECT (CASE WHEN effective_date = prior_effective_date 
             THEN null
             ELSE effective_date
         END) effective_date,
       (CASE WHEN end_date = prior_end_date 
             THEN null
             ELSE end_date
         END) end_date,
       description ,
       subpart
  FROM
    (SELECT effective_date,
            lag(effective_date) over 
                (order by effective_date desc, description asc) prior_effective_date,
            end_date,
            lag(end_date) over 
                (order by effective_date desc, description asc) prior_end_date,
            desc,
            subpart
       FROM <<your query>>)
1 голос
/ 20 апреля 2011

Если вы используете SQL * Plus для генерации вывода, вы можете использовать BREAK:

BREAK ON EFFECTIVE_DATE ON END_DATE
SELECT ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...