MS SQL How to pivot rows of 2 columns into multiple new columns using 1 pivot

I was wondering if it’s possible to improve the pivot I used to cater the values of two columns into multiple new columns using 1 pivot instead of using 2 and joining them.

I need the value of 2 of my columns, Date and Amount to be pivoted based on Type. I already did a single pivot separately on Date and Amount column then used inner join to combine them.

WORKING QUERY: http://sqlfiddle.com/#!18/34054/3

I used the pivot method mentioned here for the working query: Pivot rows into multiple columns

SELECT     aa.subscriber_id,      aa.msisdn,     aa.name,     aa.age,     bb.TOPUP as topup_date,     aa.TOPUP as topup_amount,     bb.VOICE as voice_date,     aa.VOICE as voice_amount,     bb.SMS as sms_date,     aa.SMS as sms_amount FROM   (SELECT *   FROM (       SELECT distinct       a.subscriber_id,      a.msisdn,     a.name,     a.age,      a.transaction_type,      a.amount       FROM trans a       INNER JOIN       (         SELECT max(transaction_date) mxdate, subscriber_id, transaction_type         FROM trans         WHERE CAST(transaction_date as DATE) BETWEEN '2019-01-01' and '2019-01-31'         GROUP BY subscriber_id,transaction_type        ) b         ON a.subscriber_id = b.subscriber_id         AND a.transaction_date = b.mxdate         AND a.transaction_type = b.transaction_type   ) AS SourceTable PIVOT( max(amount) FOR [transaction_type] IN ([TOPUP],    [VOICE],   [SMS])) AS PivotTable) aa INNER JOIN   (SELECT *   FROM (       SELECT distinct       a.subscriber_id,      a.msisdn,     a.name,     a.age,      a.transaction_type,      a.transaction_date       FROM trans a       INNER JOIN       (         SELECT max(transaction_date) mxdate, subscriber_id, transaction_type         FROM trans         WHERE CAST(transaction_date as DATE) BETWEEN '2019-01-01' and '2019-01-31'         GROUP BY subscriber_id,transaction_type        ) b         ON a.subscriber_id = b.subscriber_id         AND a.transaction_date = b.mxdate         AND a.transaction_type = b.transaction_type   ) AS SourceTable PIVOT( max(transaction_date) FOR [transaction_type] IN ([TOPUP],    [VOICE],   [SMS])) AS PivotTable) bb   ON aa.subscriber_id = bb.subscriber_id   AND aa.msisdn = bb.msisdn   AND aa.name = bb.name   AND aa.age = bb.age