sql server 2012 – 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