Учитывая, что у меня есть таблица содержит данные пользователя, например:Как суммировать в PL/SQL
userID calltime result
1 10:20 1
1 11:00 2
1 11:30 1
2 9:30 1
2 11:00 1
3 10:00 1
3 10:30 2
3 11:00 1
3 11:30 2
Теперь я хочу резюмировать так:
userID result1 result2
1 2 1
2 2 0
3 2 2
(total) 6 3
для меня, суммируя пользовательские данные в порядке, но как я могу добавить общую строку в запрос? СОЮЗ не работает с этим.
Большое вам спасибо за это.
EDIT: это мой текущий запрос, конечно, он не работает:
PROCEDURE P_SUMMARIZE_CALL
(
pStartDate IN DATE,
pEndDate IN DATE,
SummaryCur OUT MEGAGREEN_CUR
)
IS
BEGIN
OPEN SUMMARYCUR FOR
SELECT USERID, TOTALCALLS,CONNECTEDCALLS,RATE,NOANSWER FROM
(((SELECT USERID,
count(CALLID) AS TOTALCALLS,
sum(CONNECTED) as CONNECTEDCALLS,
sum(CONNECTED)/count(CALLID)*100 || '%' AS RATE,
(count(CALLID) - sum(CONNECTED)) AS NOANSWER
FROM CALLLOGS
WHERE STARTTIME BETWEEN pStartDate AND pEndDate
group by USERID) c
FULL OUTER JOIN USERS u
ON c.USERID = u.ID)
UNION ALL
(SELECT NULL,count(CALLID) AS TOTALCALLS,
sum(CONNECTED) as CONNECTEDCALLS,
sum(CONNECTED)/count(CALLID)*100 || '%' AS RATE,
(count(CALLID) - sum(CONNECTED)) AS NOANSWER
FROM CALLLOGS
WHERE STARTTIME BETWEEN pStartDate AND pEndDate group by NULL));
END;
Есть ли какая-то причина, по которой вы используете «ПОЛНУЮ ВНУТРЕННУЮ РАБОТУ»? Это, вероятно, делает больше работы, чем необходимо, так как кажется, что вы действительно хотите «ПРАВИЛЬНОЕ ВСТУПЛЕНИЕ», если я не ошибаюсь. И это вернет много полностью нулевых строк, так как вы используете c.USERID вместо u.ID –
, что я хотел. Когда отображается в gridcontrol, значение null будет преобразовано в 0, если я не использую RIGHT OUTER JOIN, пользователь, который не имеет вызова, будет проигнорирован – Vimvq1987