在每个唯一行之间显示空白行?

问题描述 投票:0回答:2

我有一个简单的查询,例如:

SELECT employee, ITEM_TYPE, COUNT(ITEM_TYPE)
FROM   hr_database

所以输出可能看起来像

 BOB  MUGS  4 
 BOB  PENCILS 10 
 CAT  MUGS  2 
 CAT  PAPERCLIPS  7 
 SAL  MUGS  11

但是出于可读性考虑,我想在输出中的每个用户之间放置一个空白行(例如,出于可读性:

 BOB  MUGS  4 
 BOB  PENCILS 10 

 CAT  MUGS  2 
 CAT  PAPERCLIPS  7 

 SAL  MUGS  11

在Oracle SQL中有没有办法做到这一点?到目前为止,I found this link but it doesn't match what I need。我正在考虑在查询中使用WITH?

sql oracle
2个回答
3
投票
您可以在数据库中执行此操作,但是这种类型的处理实际上应该在应用程序层进行。

但是,这很有趣,可以弄清楚如何在数据库中执行此操作,这是您的特定问题:

WITH e AS ( SELECT employee, ITEM_TYPE, COUNT(ITEM_TYPE) as cnt FROM hr_database GROUP BY employee, ITEM_TYPE ) SELECT (case when cnt is not null then employee end) as employee, item_type, cnt FROM (select employee, item_type, cnt, 1 as x from e union all select distinct employee, NULL, NULL, 2 as x from e ) e ORDER BY e.employee, x;

但是,我强调这确实是出于娱乐目的,也许是为了更好地理解SQL的工作方式。在现实世界中,您可以在应用程序层执行此类工作。

有关其工作原理的摘要。 union all为每位员工增加一行。 x是排序的优先级-因为您必须对结果集进行排序才能获得正确的排序。需要使用case语句来防止employee位于第一列中。对于有效行,cnt永远不应为NULL


0
投票
您可以通过普通的联合和独特的方式尝试这种方式从中选择emp,item_type,cnt(选择不同的''作为emp,''作为item_type,''作为cnt,雇员来自hr_database联盟选择emper作为emp,item_type,to_char(count(item_type))作为cnt,employee来自hr_database按员工分组,item_type)a由员工订购]
© www.soinside.com 2019 - 2024. All rights reserved.