Получение дубликатов в запросе SQL - PullRequest
0 голосов
/ 12 сентября 2018

Попытка создать панель мониторинга, используя следующий запрос -

select a.distinct_id, 
       trunc(a.dte) Transaction_Date, 
       a.dte, 
       a.activity, 
       a.part, 
       a.loading, 
       a.user_name, 
       a.device, 
       a.fromloc, 
       a.toloc, 
       a.to_area, 
       b.NAME||' '||b.Surname Name, 
       a.qty, 
       DECODE(d.workarea, 'Tables','Wood','Metal')Material
from table a,  table b, table c, table d
where (a.toloc = d.storage 
  and a.part = c.part and c.region = 'Country1' 
  and a.dte > trunc(sysdate) - '9' 
  and a.region = 'Country1' 
  and a.activity = 'IDENTIFY' 
  and a.user_name = b.user_name 
  and d.maxarea <> 0 )

Когда я удаляю последнее ограничение из оператора where (то есть d.maxarea <> 0), выходные данные не показывают повторы, но когда я добавляю это в запросе снова, он показывает повторяющиеся записи с тем же значимым.90_ *. 1004 *

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Если вам нужны отдельные строки, то вам нужно добавить DISTINCT в код как в

  SELECT DISTINCT a.distinct_id, trunc(a.dte) Transaction_Date, a.dte, a.activity, a.part, 
  a.loading, a.user_name, a.device, a.fromloc, a.toloc, a.to_area, b.NAME||' '||b.Surname 
  Name, a.qty, DECODE(d.workarea, 'Tables','Wood','Metal')Material

  from table a,  table b, table c, table d

  where 
  (a.toloc = d.storage and a.part = c.part and c.region = 'Country1' and a.dte > 
   trunc(sysdate) - '9' and a.region = 'Country1' and a.activity = 'IDENTIFY' and 
  a.user_name = b.user_name and d.maxarea <> 0 )

Однако я бы предложил использовать объединения из формата SQL92, а не формата SQL89 для удобства чтения

0 голосов
/ 12 сентября 2018

Ваш запрос должен быть написан так:

select a.distinct_id, trunc(a.dte) as Transaction_Date, a.dte, a.activity, a.part, a.loading, a.user_name, a.device, a.fromloc, a.toloc, a.to_area,
       (b.NAME||' '||b.Surname Name), a.qty,
       (case when d.workarea = 'Tables' then 'Wood' else 'Metal' end) as Material   
from a join
     b
     on a.user_name = b.user_name join
     c
     on a.part = c.part join
     d
     on a.toloc = d.storage
where c.region = 'Country1' and
      a.dte > trunc(sysdate) - interval '9' day and
      a.region = 'Country1' and
      a.activity = 'IDENTIFY' and
      d.maxarea <> 0;

Я не уверен, в чем ваша проблема, но вы должны научиться правильно писать запрос:

  • Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный join синтаксис.
  • decode() зависит от базы данных. Стандартная логика: case.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...