Вы можете использовать для этого WINDOW-функции DB2.
Вы можете переписать свой существующий запрос следующим образом:
SELECT T1.REQUEST_ID, COUNT(1) OVER(PARTITION BY T1.REQUEST_ID) AS TRANS_ABC
FROM TABLE1 AS T1, TABLE2 AS T2
WHERE T1.REQUEST_ID=1234
AND T1.COMPONENTID = T2.PARENTCOMPID
AND T2.TRANS_TYPE='ABC'
Вы можете использовать любой столбец в списке выбора, когда используетеоконная функция.Обратитесь по ссылке ниже для получения дополнительной информации:
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0023461.htm
Если вы хотите, чтобы данные были повернуты, я не уверен, что DB2 по своей природе поддерживает PIVOT / UNPIVOT.Это лучшее, что я могу построить (хотя не уверен насчет производительности и не проверял запрос):
ПРИМЕЧАНИЕ. В этом запросе рассматриваются 6 различных типов trans_types.Если Trans_Type не является конечным, я не уверен, что будет какое-либо простое решение.
SELECT *
FROM (
SELECT t1.request_id,
t1.req_user,
t1.req_acct,
SUM(DECODE(trans_type, 'AA',1, 0)) OVER(PARTITION BY t1.request_id) AS trans_aa,
SUM(DECODE(trans_type, 'BB',1, 0)) OVER(PARTITION BY t1.request_id) AS trans_bb,
SUM(DECODE(trans_type, 'CC',1, 0)) OVER(PARTITION BY t1.request_id) AS trans_cc,
SUM(DECODE(trans_type, 'DD',1, 0)) OVER(PARTITION BY t1.request_id) AS trans_dd,
SUM(DECODE(trans_type, 'EE',1, 0)) OVER(PARTITION BY t1.request_id) AS trans_ee,
SUM(DECODE(trans_type, 'FF',1, 0)) OVER(PARTITION BY t1.request_id) AS trans_ff,
SUM(1) AS total_trans
ROW_NUMBER() OVER(PARTITION BY t1.request_id) AS rn
FROM TABLE1 AS t1, TABLE2 AS t2
WHERE t1.request_id=1234 AND t1.componentid = t2.parentcompid
) a
WHERE rn = 1