需要:合并相同用户名,公司按逗号分隔。并且要按新增修改时间排序。
网上查了一下 GROUP BY ORDER BY 想要同时使用 ,ORDER BY 中的字段一定要在GROUP BY 中出现的字段,但这样会导致不同时间添加的同一用户名下没办法合成同一条数据。
后来自己研究了一下发现 可以用max函数 MAX(A.STATE_TIME) STATE_TIME ,这样就不用放GROUP BY 中了。
SELECT A.USER_ID,
A.USER_NAME,
MAX(A.STATE_TIME) STATE_TIME,
COLUMNTOROW(',' || A.SAP_COST_CENTER_ID) SAP_COST_CENTER_ID,
COLUMNTOROW(',' || TO_CHAR(A.SAP_COST_CENTER_NAME)) SAP_COST_CENTER_NAME
FROM CFG_USER_PART_TIME A
LEFT JOIN (SELECT *
FROM (SELECT MAX(USER_ID) USER_ID, ORG_ID
FROM FFDEV.P_M_USERS_ORGS
GROUP BY ORG_ID) B
LEFT JOIN P_M_ORG_LOCATION C
ON B.ORG_ID = C.ORG_ID) D
ON A.USER_ID = D.USER_ID
WHERE A.STATE = '10A'
GROUP BY A.USER_ID, A.USER_NAME
ORDER BY STATE_TIME DESC
这样就可以按时间排序了。