Как выбрать одну строку из двух разных столбцов с одинаковым значением - PullRequest
0 голосов
/ 03 марта 2020

enter image description here

Привет, мне нужно выбрать только строку .. для этой таблицы

row1 = revserse (row4)

мой код :

    select ROW_NUMBER() OVER() ID, c.localidad, acalle,bcalle
    from (
      SELECT a.localidad, a.calle acalle, b.calle bcalle
      FROM (
        SELECT LOCALIDAD, CALLE 
        FROM TEST.INICIAL
        WHERE CALLE IS NOT NULL
        GROUP BY 1,2
      ) A
      INNER JOIN (
        SELECT LOCALIDAD, CALLE 
        FROM TEST.INICIAL
        WHERE CALLE IS NOT NULL
        GROUP BY 1,2
      ) B ON A.LOCALIDAD = B.LOCALIDAD 
      WHERE SIMILARITY(A.CALLE ,B.CALLE) > 0.45
         AND A.CALLE <> B.CALLE
    ) c
    where acalle not like '%NORTE' 
      and acalle not like '%SUR' 
      and acalle not like '%ESTE' 
      and acalle not like '%OESTE' 
      AND Bcalle not like '%NORTE' 
      and Bcalle not like '%SUR' 
      and Bcalle not like '%ESTE' 
      and Bcalle not like '%OESTE' 
      AND ACALLE NOT LIKE 'PJE%' 
      AND BCALLE NOT LIKE 'PJE%'
      and acalle not like '%BIS'
      and bcalle not like '%BIS' 
      and acalle not like '%CALLE%' 
      AND BCALLE NOT LIKE '%CALLE%'
    order by 1,2,3

1 Ответ

1 голос
/ 03 марта 2020

Используйте CASE, чтобы убедиться, что значения столбцов находятся в одном и том же порядке (неважно, как они упорядочены, только если они согласованы от одной строки к следующей), создайте массив из [col1, col2], и SELECT DISTINCT на этом.

testdb=# with orig_output as (
select 1::bigint as id, 'ADROGUE' as localidad, 'JORGE' as acalle, 'JORGE DE KAY' as bcalle UNION ALL
select 2, 'ADROGUE', 'PLAZA ESTABAN ADROGUE', 'ESTEBAN ADROGUE' UNION ALL
select 3, 'ADROGUE', 'ESTEBAN ADROGUE', 'PLAZA ESTABAN ADROGUE' UNION ALL
select 4, 'ADROGUE', 'JORGE DE KAY', 'JORGE'),
make_columns_be_in_same_order AS (
SELECT id, localidad, acalle, bcalle,
  CASE WHEN acalle>bcalle
    THEN ARRAY[acalle, bcalle]
    ELSE ARRAY[bcalle, acalle]
  END AS acalle_and_bcalle
FROM orig_output
)
SELECT DISTINCT ON (acalle_and_bcalle)
id, localidad, acalle, bcalle
FROM make_columns_be_in_same_order;
 id | localidad |        acalle         |     bcalle      
----+-----------+-----------------------+-----------------
  1 | ADROGUE   | JORGE                 | JORGE DE KAY
  2 | ADROGUE   | PLAZA ESTABAN ADROGUE | ESTEBAN ADROGUE
(2 rows)
...