как получить одну строку из 3 строк, где все столбцы имеют одинаковый идентификатор, но другие данные не совпадают - PullRequest
0 голосов
/ 01 ноября 2019
SELECT
    isbn13,
    MAX(TITLE) as TIT,
    MAX(PUBLISHER) as PUB,
   MAX(PUBLICATION_DATE)as P_DATE,
   MAX(PUBLICATION_COUNTRY_LOCATION) as P_C_LOC,
   MAX(BISAC_CODES) as B_CODES,
   MAX(BIC_SUBJECT_CODE)as B_S_CODES,
   MAX(FLEXFIELD2) as B_style,
   MAX(FLEXFIELD3) as lam_type,
   MAX(FLEXFIELD5) as color_text,
   MAX(FLEXFIELD6) as cover_color,
   MAX(FLEXFIELD7) as paper_type,
   MAX(FLEXFIELD8) as GSM,
   MAX(FLEXFIELD9) as casing,
   MAX(FLEXFIELD10) as spine,
   MAX(FLEXFIELD10) as thickness,
   MAX(FLEXFIELD12) as height,
   MAX(FLEXFIELD13) as width,
   MAX(PAGE_COUNT) as P_count
FROM
    (select isbn13,TITLE,PUBLISHER,PUBLICATION_DATE,PUBLICATION_COUNTRY_LOCATION,BISAC_CODES,BIC_SUBJECT_CODE,
    FLEXFIELD2,FLEXFIELD3,FLEXFIELD5,FLEXFIELD6,FLEXFIELD7,FLEXFIELD8,FLEXFIELD9,FLEXFIELD10,FLEXFIELD12,FLEXFIELD13,PAGE_COUNT,
     ROWNUM as rn from(select * from catalog_master ORDER BY cat_id ASC)
    union
    select isbn13,TITLE,PUBLISHER,PUBLICATION_DATE,PUBLICATION_COUNTRY_LOCATION,BISAC_CODES,BIC_SUBJECT_CODE,
    FLEXFIELD2,FLEXFIELD3,FLEXFIELD5,FLEXFIELD6,FLEXFIELD7,FLEXFIELD8,FLEXFIELD9,FLEXFIELD10,FLEXFIELD12,FLEXFIELD13,PAGE_COUNT,
    rownum as rn from (select * from sec_catalog_master ORDER BY cat_id ASC)
    )
where rn>0 and rn<=100
GROUP BY isbn13
ORDER BY isbn13 ASC

У меня есть таблица в базе данных, где идентификатор уникален, но в конце источника идентификатор дублируется. данные, относящиеся к этому дублированному идентификатору, не совпадают. поэтому я хочу получить одну строку из идентификатора этих дубликатов.

Я пытался использовать функцию MAX и MIN в SQL, но это даст мне неверные данные.

Я ожидаю, что результат, как когда язапустите запрос. Мне нужны данные, из которых я получаю одну строку из всех этих дубликатов.

1 Ответ

0 голосов
/ 01 ноября 2019

Вы можете использовать аналитическую функцию row_number() для этого, например:

select id,
       col2,
       col3,
       ...
       orderby_col
from   (select yt.id,
               yt.col2,
               yt.col3, 
               ...
               yt.orderby_col
               row_number() over (partition by yt.id order by yt.orderby_col) rn
        from   your_table)
where  rn = 1;

Это работает, группируя данные в наборы, используя столбец (может быть несколько столбцов) в partition byс последующим применением к ним номера строки в порядке, указанном столбцами в предложении order by.

После того, как у вас есть каждый набор идентификаторов, вы можете просто выбрать первую строкуиз каждой группы.

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