Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL Group By if

SQL Fiddle

Настройка на схема на Oracle 11g R2 :

CREATE TABLE FILE_USAGE_LOG (TESTID, SITE, LATEST_READ, READ_COUNT, FILE_ORIGIN_ID ) КАТО ИЗБЕРЕТЕ „Файл1“, „Сайт1“, ДАТА „2013-05-02“, 2, 1 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ „Файл1“, „Site2“, ДАТА „2014-01-22“, 3, 2 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ „File2“, „Site1“, ДАТА „2014-06-02“, 8, 0 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ „File3“, „Site1“ ', ДАТА '2014-09-19', 17, 0 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ 'File4', 'Site2', ДАТА '2014-09-19', 14, 2 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ 'File4', 'Site2', ДАТА '2014-09-19', 34, 1 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ 'File4', 'Site3', ДАТА '2014-09-19', 10, 0 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ 'File5', 'Site2', ДАТА ' 2014-09-19', 44, 2 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ 'File5', 'Site3', ДАТА '2014-09-19', 1, 2 ОТ DUAL; 

Заявка 1 :

SELECT TESTID, REGEXP_REPLACE( LISTAGG( SITE, ', ' ) WITHIN GROUP( ORDER BY SITE ), '([^, ]+)(, \1)+($|, )', '\ 1\3' ) AS SITES, MAX( LATEST_READ ) AS LATEST_READ, SUM(READ_COUNT) AS Total_Read_CountFROM FILE_USAGE_LOG GROUP BY TESTIDHAVING COUNT( CASE FILE_ORIGIN_ID WHEN 2 THEN NULL ELSE 1 END )> 0UNION ALLSELECT TESTID, SITE, LATEST_READ, READ_COUNTFROM FILE_USAGE_LOG lWHERE FILE_ORIGIN_ID =2AND NOT EXISTS ( SELECT 'X' FROM FILE_USAGE_LOG x WHERE x.TESTID =l.TESTID AND x.FILE_ORIGIN_ID <> 2 )ORDER BY 1,2 

Резултати :

<предварителен код>| ТЕСТИД | САЙТОВЕ | ПОСЛЕДНО_ЧЕТЕНО | TOTAL_READ_COUNT ||--------|--------------|------------------------ ------|------------------|| Файл1 | Сайт1, Сайт2 | 22 януари 2014 г. 00:00:00 | 5 || Файл2 | Сайт1 | 02 юни 2014 г. 00:00:00 | 8 || Файл3 | Сайт1 | 19 септември 2014 г. 00:00:00 | 17 || Файл4 | Сайт 2, Сайт 3 | 19 септември 2014 г. 00:00:00 | 58 || Файл5 | Сайт2 | 19 септември 2014 г. 00:00:00 | 44 || Файл5 | Сайт 3 | 19 септември 2014 г. 00:00:00 | 1 |

Заявка 2 :

SELECT TESTID, REGEXP_REPLACE( LISTAGG( SITE, ', ' ) WITHIN GROUP( ORDER BY SITE ), '([^, ]+)(, \1)+($|, )', '\ 1\3' ) AS SITES, MAX( LATEST_READ ) AS LATEST_READ, SUM(READ_COUNT) AS Total_Read_CountFROM FILE_USAGE_LOG WHERE TESTID NOT LIKE 'this%'AND LATEST_READ BETWEEN DATE '2014-01-01' AND DATE '2014-12-31' ГРУПИРАНЕ ПО TESTIDHAVING COUNT( CASE FILE_ORIGIN_ID WHEN 2 THEN NULL ELSE 1 END )> 0UNION ALLSELECT TESTID, SITE, LATEST_READ, READ_COUNTFROM FILE_USAGE_LOG lWHERE FILE_ORIGIN_ID =2AND NOT EXISTS ( SELECT 'X' FROM FILE_USAGE_LOG AND x.TESTID WHERE =l.TESTID .FILE_ORIGIN_ID <> 2 И TESTID NOT LIKE 'this%' AND LATEST_READ BETWEEN DATE '2014-01-01' AND DATE '2014-12-31' )AND TESTID NOT LIKE 'this%'AND LATEST_READ B МЕЖДУ ДАТА „2014-01-01“ И ДАТА „2014-12-31“ ПОРЪЧКА ПО 1,2 

Резултати :

<предварителен код>| ТЕСТИД | САЙТОВЕ | ПОСЛЕДНО_ЧЕТЕНО | TOTAL_READ_COUNT ||--------|--------------|------------------------ ------|------------------|| Файл1 | Сайт2 | 22 януари 2014 г. 00:00:00 | 3 || Файл2 | Сайт1 | 02 юни 2014 г. 00:00:00 | 8 || Файл3 | Сайт1 | 19 септември 2014 г. 00:00:00 | 17 || Файл4 | Сайт 2, Сайт 3 | 19 септември 2014 г. 00:00:00 | 58 || Файл5 | Сайт2 | 19 септември 2014 г. 00:00:00 | 44 || Файл5 | Сайт 3 | 19 септември 2014 г. 00:00:00 | 1 |

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете първата непрекъсната група редове с помощта на Oracle SQL

  2. Как да премахнете Oracle LOB

  3. Параметризирана заявка на Oracle в c#

  4. свързващ оракул от r

  5. Извикване на извикване на функция в низ в процедура на Oracle