As you already wrote you need to join the same table twice:
select from emp_table as e left join address_table as home on e.address_code = home.address_code and address_type = 'home' left join address_table as office on e.address_code = office.address_code and address_type = 'office'
You could return the same result using some MIN(CASE...) or OLAP functions, but the join is pürobably the most efficient (in this case).
The data provided looked like preknown values/number of values, for this it's the right query. If the values are unknown, but maximum number of rows per value is low/known and you just need a kind of repeating group, it's possible, too, e.g. with OLAP functions.
But if you look for a real crosstab, there's no PIVOT in Teradata, yet. Of course you could write a Stored Procedure which builts the neccessary SQL and returns a crosstab, i've done that looong years ago in MS SQL Server.