2014-05-15 2 views
0

В надежде, что кто-то здесь может помочь.SQL - Как исключить UNIQUE возвращенные строки

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

http://i.imgur.com/BMAaFB6.png

Это мой текущий запрос:

SELECT i.prtnum, i.lodnum, i.lotnum, i.untqty, i.ftpcod, i.invsts 
FROM inventory_view i, locmst m 
WHERE i.stoloc = m.stoloc 
AND m.arecod = 'PART-HSY' 
ORDER BY i.prtnum 

Если вы смотрите на картину, мне нужен запрос, чтобы исключить строки, как 3-ий. (00005-86666-000)

ответ

0

Вы не дали много рассуждений о том, почему, чтобы исключить эту строку, но вы можете исключить, prtnum, как вы просили:

SELECT i.prtnum, i.lodnum, i.lotnum, i.untqty, i.ftpcod, i.invsts 
FROM inventory_view i, locmst m 
WHERE i.stoloc = m.stoloc 
    AND m.arecod = 'PART-HSY' 
    AND i.prtnum NOT IN(SELECT i2.prtnum FROM inventory_view i2, locmst m2 
             WHERE i2.stoloc = m2.stoloc AND m2.arecod = 'PART-HSY' 
             GROUP BY i2.prtnum HAVING COUNT(*) = 1) 
ORDER BY i.prtnum 
+0

Да, я уже сделал что-то подобное. Однако я ценю помощь. Я ищу способ отделить не-уникальный prtnum без необходимости жестко кодировать значения предложения IN. – user3642066

+0

Я исправил свой ответ. –

+0

Это все еще жестко кодирует исключения. –

0

Как о чем-то вроде:

SELECT  i.prtnum, 
      i.lodnum, 
      i.lotnum, 
      i.untqty, 
      i.ftpcod, 
      i.invsts 
FROM  inventory_view i, 
      locmst.m 
WHERE  i.stoloc = m.stoloc 
AND   m.arecod = 'PART-HSY' 
AND   i.prtnum IN 
(
    SELECT  prtnum 
    FROM  inventory_view j 
    HAVING  count(prtnum)>1 
    GROUP BY prtnum 
) 
+0

Я тоже пробовал что-то вроде этого. Он будет возвращать только одну строку. (Я знаю, что есть не менее 400 строк, которые имеют тот же самый prtnum в таблице inventory_view – user3642066

+0

Я отредактировал его, выполнит ли это задание? Кроме того, производительность может отличаться в зависимости от того, имеет ли основной запрос условие ORDER BY. –

0
SELECT i.prtnum, i.lodnum, i.lotnum, i.untqty, i.ftpcod, i.invsts 
FROM inventory_view i, locmst m 
WHERE i.stoloc = m.stoloc 
AND EXISTS (SELECT * FROM Inventory_view k 
        WHERE k.prtnum == i.prtnum AND k.id <> i.id) 
AND m.arecod = 'PART-HSY' 
ORDER BY i.prtnum 

где i.id/k.id - это идентификатор вашей таблицы. Это немного неэффективно, но оно должно работать.

0

Есть несколько способов сделать то, что вы просите. Если я правильно понимаю, это просто исключение строк, которые имеют значение в данном столбце, которое отображается только один раз в вашей таблице. Если да, то вы можете сделать что-то вроде этого:

SELECT i.prtnum, i.lodnum, i.lotnum, i.untqty, i.ftpcod, i.invsts 
FROM inventory_view i 
JOIN locmst m ON i.stoloc = m.stoloc AND m.arecod = 'PART-HSY' 
JOIN inventory_view i1 ON i1.prtnum = i.prtnum AND i1.lodnum != i.lodnum 
ORDER BY i.prtnum 

Этот метод гарантирует, что строки, возвращаемые имеют prtnum, который соответствует prtnum других записей в одной таблице. Я предполагаю, что lodnum - это Лицензия No от вашего изображения.

+0

Я пробовал это, но получил ошибку «Максимальные строки, превышенные в запросе». верить запрос не работает так, как предполагалось, поскольку он должен сокращать набор результатов, не увеличиваясь. – user3642066

Смежные вопросы