2016-10-19 1 views
0

У меня сложный запрос и выборки строк текстовых данных. Эта часть работает нормально. Я хотел бы включить количество возвращенных строк, чтобы экспортировать электронную таблицу легче фильтровать.Как выбрать несколько значений из набора результатов подвыбора, используя Oracle 11?

Так предполагая, мы запрос такого рода:

SELECT 
    TRIM(COL_1 || ' (' || COL_2 || ')') AS MY_DATA 
FROM 
    TABLE_1 
    INNER JOIN TABLE_2... 
WHERE 
    TABLE_1.COL_1=... 
ORDER BY 
    TABLE_1.COL_1 

я могу сделать:

SELECT * FROM (quoted query) 

и это дает мне набор результатов.

я могу сделать:

SELECT MY_DATA FROM (quoted query) 

и это дает мне набор результатов.

я могу сделать:

SELECT COUNT(MY_DATA) FROM (quoted query) 

и это дает мне количество строк.

Но когда я пытаюсь:

SELECT COUNT(MY_DATA), MY-DATA FROM (quoted query) 

я

ORA-00937: не функциональная группа одногрупповое

Использование Oracle 11, можно выбрать как количество строк и количество строк из подзаголовка? Подзаборка в моем случае сложна, и я не хочу дублировать ее, чтобы получить счет и детали отдельно. Я попробовал WITH/AS, но столкнулся с той же ошибкой.

====

Примечание: это не является дубликатом предлагаемого вопроса - я не использую любую группировку в моем случае. Это не проблема группировки - просто вводящее в заблуждение сообщение об ошибке.

+0

Этот вопрос не является дубликатом упомянутого вопроса. Этот вопрос задает вопрос о возврате счета с каждой подробной записью. – DCookie

ответ

3

Вы хотите аналитическую функцию здесь:

SELECT COUNT(MY_DATA) OVER() ct, MY-DATA FROM (quoted query) 

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

+0

@ user6651485 - Вы также можете выполнить кросс-соединение (декартовое объединение) между 'select count (*) ...' и 'select my_data ...', и соединение не будет дорогостоящим, так как левая часть имеет только одна строка. Но это все равно потребует дважды выполнить результирующий набор запроса, один раз, чтобы получить счетчик, а затем снова сделать соединение. Это большое преимущество аналитических функций, и почему ответ DCookie является правильным. – mathguy

+0

Работает как очарование. Благодаря! – user6651485

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

  • Нет связанных вопросов^_^