Oracle DB sql group表将模式命名为一个组
我正在尝试将表的某些模式分类到各个组中,并显示结果。这很好,我包含了一个case语句并对其进行了分类,但如何对计数进行分组,让我们提供sql逻辑、现有结果和预期结果,以便理解 数据库是Oracle11g SQL查询Oracle DB sql group表将模式命名为一个组,sql,oracle,oracle11g,common-table-expression,Sql,Oracle,Oracle11g,Common Table Expression,我正在尝试将表的某些模式分类到各个组中,并显示结果。这很好,我包含了一个case语句并对其进行了分类,但如何对计数进行分组,让我们提供sql逻辑、现有结果和预期结果,以便理解 数据库是Oracle11g SQL查询 select DISTINCT OBJECT_NAME ,count(*) as COUNTS, CASE WHEN OBJECT_NAME LIKE '%AB_ABC%' THEN 'ABC' WHEN OBJECT_NAME LIKE 'AB_BBC%'
select DISTINCT OBJECT_NAME ,count(*) as COUNTS,
CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE
'OTHER'
END
AS TABLE_GROUP
from dba_objects
where owner='SCHEMA_NAME'
and object_type='TABLE'
/*and OBJECT_NAME not like '%AB_ABC%'
and OBJECT_NAME not like '%AB_BBC%'
and OBJECT_NAME not like '%AB_CNBC%'
and OBJECT_NAME not like '%AB_PTV%'
and OBJECT_NAME not like '%AB_CNN%'
and OBJECT_NAME not like '%TEMP%'
and OBJECT_NAME not like '%SKY_TV%'*/
group by OBJECT_NAME
order by object_name;
现有结果
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 1
AB_BBC BBC 1
AB_CNBC CNBC 1
AB_PTV PTV 1
AB_CNN CNN 1
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 120
AB_BBC BBC 130
AB_CNBC CNBC 20
AB_PTV PTV 80
AB_CNN CNN 600
预期结果
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 1
AB_BBC BBC 1
AB_CNBC CNBC 1
AB_PTV PTV 1
AB_CNN CNN 1
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 120
AB_BBC BBC 130
AB_CNBC CNBC 20
AB_PTV PTV 80
AB_CNN CNN 600
如何达到预期的效果?使用任何与CTE
请建议一种可能的最佳方式?通过
案例
表达式进行聚合:
select count(*) as COUNTS,
CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE 'OTHER'
END AS TABLE_GROUP
from dba_objects
where owner='SCHEMA_NAME' and object_type='TABLE'
/*and OBJECT_NAME not like '%AB_ABC%'
and OBJECT_NAME not like '%AB_BBC%'
and OBJECT_NAME not like '%AB_CNBC%'
and OBJECT_NAME not like '%AB_PTV%'
and OBJECT_NAME not like '%AB_CNN%'
and OBJECT_NAME not like '%TEMP%'
and OBJECT_NAME not like '%SKY_TV%'*/
group by CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE 'OTHER'
END
非常感谢它奏效了