select
userid,
max(case when name = 'EMAIL' then val else 0 end) as email,
max(case when name = 'PHONE' then val else 0 end) as phone,
max(case when name = 'DOB' then val else 0 end) as dob
from key_value_table
group by userid
select
userid,
max(case when name = 'EMAIL' then val else 0 end) as email,
max(case when name = 'PHONE' then val else 0 end) as phone,
max(case when name = 'DOB' then val else 0 end) as dob
from key_value_table
group by userid
WITH CTE1 AS (select current_date as today) select today from CTE1;
Ref: http://dwgeek.com/teradata-with-clause-syntax-usage-and-examples.html/