我有一个简单的查询,例如:
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?
但是,这很有趣,可以弄清楚如何在数据库中执行此操作,这是您的特定问题:
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
。