2015-08-31 5 views
0

Я застрял в написании сводной таблицы. У меня проблема, потому что мой общий запрос должен быть полукомплексным. Мы хотим включить кучу столбцов, только что повернутых.SQL Pivot table dilemma

select distinct 
a.customer_no, 
a.fname, 
isnull(a.mname,'') as 'mname', 
a.lname, 
d.description, 
c.address 
from T_CUSTOMER a 
left outer join T_EADDRESS c on a.customer_no = c.customer_no 
join TR_EADDRESS_TYPE d on c.eaddress_type = d.id 
left outer join lt_nyo_applicants_cust_screen i on a.customer_no = i.customer_no 
where a.customer_no in (
         Select Distinct a.customer_no 
         From V_CUSTOMER_WITH_PRIMARY_GROUP a WITH (NOLOCK) 
         Where IsNull(a.inactive, 1) = 1 
         AND EXISTS (select * from tx_cust_keyword WITH (NOLOCK) where tx_cust_keyword.customer_no in (select customer_no from V_CUSTOMER_WITH_PRIMARY_GROUP where customer_no = a.customer_no) and tx_cust_keyword.key_value in ('Participant') And tx_cust_keyword.keyword_no = 651) 
         UNION 
         Select Distinct a.customer_no 
         From V_CUSTOMER_WITH_PRIMARY_GROUP a WITH (NOLOCK) 
         JOIN (Select a1.customer_no From lt_nyo_applicants_cust_screen a1 WITH (NOLOCK) Where a1.application_status in (1) and a1.season in ('2014-2015','2015-2016')) as e ON e.customer_no = a.customer_no 
         Where IsNull(a.inactive, 1) = 1 
         ) 
and c.inactive = 'N' 
order by customer_no 

Данные выглядит следующим образом:

customer_no fnmame mname LNAME то есть поле описания (EMAIL_TYPE), на котором мы должны поворачиваться и адреса электронной почты

customer_no fname mname lname description    address   
5   john   Smith Primary Email Address [email protected]  
5   john   Smith Secondary Email Address [email protected] 
8   Joseph   Petty Primary Email Address [email protected] 

Что я хочу увидеть

customer_no fname mname lname Primary Email Address Secondary Email Address 
5   john   Smith [email protected]   [email protected] 
8   Joseph   Petty [email protected] 

ответ

0

Что-то вроде этого

:with cte 
as 
(
select distinct 
a.customer_no, 
a.fname, 
isnull(a.mname,'') as 'mname', 
a.lname, 
d.description, 
... 
) 
select Customer_no,fname,mname,lname 
     max(case when description = 'Primary Email Address' then address END) as [Primary Email Address], 
     max(case when description = 'Secondary Email Address' then address END) as [Secondary Email Address] 
from CTE 
Group by Customer_no,fname,mname,lname 
+0

Извиняюсь, если я не ясно, на мой первоначальный вопрос - вопрос в том, что у меня есть около 6 (но до 10) видов адресов электронной почты, и я хочу вытащить все из них. Как мне это сделать без ввода инструкции case/max для каждого типа eaddress? – Elizabeth