如何对此数据表进行分组:
username module_id
testdavid M0003
testdavid M0001
testdavid M0004
testdavid M0002
是
username module_id
testdavid M0003
M0001
M0004
M0002
我使用此查询但仍显示4行testdavid。 这是我的疑问:
SELECT USERNAME, MODULE_ID FROM SEIAPPS_T_ACCESS_MODULE WHERE USERNAME = 'testdavid' GROUP BY USERNAME, MODULE_ID;
请帮忙解决这个问题。感谢
答案 0 :(得分:1)
通常,您希望在应用程序层中执行此类工作。结果集不符合与SQL表和结果集关联的“表”布局。
尽管如此,这是可能的:
SELECT (CASE WHEN ROW_NUMBER() OVER (PARTITION BY USERNAME ORDER BY MODULE_ID) = 1 THEN USERNAME
END) as USERNAME, MODULE_ID
FROM SEIAPPS_T_ACCESS_MODUL
WHERE USERNAME = 'testdavid'
GROUP BY USERNAME, MODULE_ID
ORDER BY USERNAME, MODULE_ID;
实际上,如果您只想获得与用户名相关联的模块列表,为什么不将它们全部放在一行上呢?
select username, listagg(module_id, ',') within group (order by module_id)
from (select username, module_id
from SEIAPPS_T_ACCESS_MODUL
where username = 'testdavid'
group by username, module_id
) um
group by username;
答案 1 :(得分:1)
我必须同意这应该在您的演示逻辑中处理。但是,这是一种使用LAG()
的方法:
select
case
when lag(username,1) over (order by username) is null then username
end username,
module_id
from yourtable
where username = 'testdavid'