Невозможно получить правильный вывод из Oracle SQL - PullRequest
0 голосов
/ 22 марта 2011

У меня есть таблица с field1, field2, field3,… и мне нужно подсчитать количество элементов в field1, чтобы я возвращал все записи (field1, filed2, field3,…), которые встречаются 6 или менее раз в таблице .

Мой код SQL:

SELECT field1, field2, field3, count(field1) CNT
FROM myTable
WHERE trunc(date)  = tp_date(‘03/22/2011’,’mm/dd/yyyy’)
GROUP BY field1
HAVING COUNT(field1)  <  7;

Вывод, который я получаю из приведенного выше кода: все записи возвращаются из таблицы, а не то, что я ожидал? Любая помощь будет оценена !!

Ответы [ 3 ]

1 голос
/ 22 марта 2011
WITH tmp AS
(
    SELECT field1, COUNT(1) as CountOfField1
    FROM myTable
    WHERE trunc(date) = tp_date(‘03/22/2011’,’mm/dd/yyyy’)
    GROUP BY field1
    HAVING COUNT(field1) < 7
)
SELECT  mytable.field1, mytable.field2, mytable.field3, tmp.CountOfField1
FROM    myTable 
        INNER JOIN tmp 
            ON myTable.Field1 = tmp.Field1
1 голос
/ 22 марта 2011

Я думаю, вам нужно использовать подзапрос:

SELECT field1, field2, field3, 
FROM myTable
WHERE trunc(date)  = tp_date(‘03/22/2011’,’mm/dd/yyyy’)
AND field1 in 
   (SELECT field1
    FROM mytable
    GROUP BY field1
    HAVING COUNT(field1)  <  7); 
0 голосов
/ 23 марта 2011

Еще один способ сделать это:

SELECT t.field1, t.field2, t.field3, 
FROM myTable t
WHERE trunc(t.date) = tp_date(‘03/22/2011’,’mm/dd/yyyy’)
  AND EXISTS
  ( SELECT *
    FROM mytable t2
    WHERE t2.field1 = t.field1
      AND trunc(t2.date) = tp_date(‘03/22/2011’,’mm/dd/yyyy’)
    GROUP BY t2.field1
    HAVING COUNT(t2.field1)  <  7
  )
; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...