如何修改SQL查询结果格式为带表头的指定样式?附SQL代码
问题解决:调整SQL实现按日期聚合并显示清晰表头
你的原SQL问题出在GROUP BY子句使用了原始的LOG_DTM时间戳,而SELECT中是格式化后的日期字符串,这会导致同一日期下不同时间的记录被单独分组,结果分散且不符合你要的按日期汇总的表头格式。
修改后的SQL代码
SELECT TO_CHAR(LOG_DTM, 'yyyy-mm-dd') RECORD_DATE, HOST_NAME PROCESS_HOST, USER_CD OS_USER, SEARCH_VARCHAR_1 PCM_USER, OPERATION_CD, SEARCH_VARCHAR_2 ACC_NAME, SEARCH_VARCHAR_3 TOOL_TYPE_CD, SEARCH_VARCHAR_4 ACC_HOST, COUNT(1) FREQUENT FROM ALS.ALS_CENTRAL_DEBUG_LOG_3 WHERE SERVICE_CD = 'SUP_PCM_CMD' AND ACTION_CD = 'END' AND OPERATION_CD IN ('getjobpwd', 'createaccountjob', 'savejobpwd', 'deactiveacctjob') AND LOG_DTM BETWEEN TRUNC(ADD_MONTHS(TO_TIMESTAMP('01-08-2022','DD-MM-YYYY'), -1), 'MM') AND LAST_DAY(ADD_MONTHS(TRUNC(TO_TIMESTAMP('01-09-2022','DD-MM-YYYY'), 'mm'), -1)) -- AND LOG_DTM BETWEEN TRUNC(ADD_MONTHS(SYSDATE, -1),'MM') -- AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'mm'),-1)) GROUP BY TO_CHAR(LOG_DTM, 'yyyy-mm-dd'), -- 替换为和SELECT一致的日期格式化表达式 HOST_NAME, USER_CD, SEARCH_VARCHAR_1, OPERATION_CD, SEARCH_VARCHAR_2, SEARCH_VARCHAR_3, SEARCH_VARCHAR_4;
关键修改点
- 将GROUP BY中的
LOG_DTM替换为TO_CHAR(LOG_DTM, 'yyyy-mm-dd'),确保分组逻辑和SELECT中取出的日期字段完全匹配,这样同一日期下的同维度记录会被聚合在一起。 - 如果更倾向于用日期类型而非字符串分组,也可以把SELECT中的
TO_CHAR(LOG_DTM, 'yyyy-mm-dd')改成TRUNC(LOG_DTM),同时GROUP BY也对应改成TRUNC(LOG_DTM),效果一致。
内容的提问来源于stack exchange,提问作者ben jjm
相关产品推荐
相关产品推荐

