Sous-requêtes SQL / auto-jointure

Il s'agit d'une database de return d'appel automatique qui stocke les commentaires des clients sur chaque question.

J'utilise SQL Server 2012 J'ai datatables suivantes dans le nom de la table [NPS_Feedback] :

CLI CallerID Customer_Account Question Feedback Date 34622968 F22141B854 400004775250 Q1 Satisfie 2016-03-25 34622968 F22141B854 400004775250 Q2 Not Satisfied 2016-03-25 34622968 F22141B854 400004775250 Q3 Not Satisfied 2016-03-25 30227453 GED903EDL 400001913180 Q1 Not Satisfied 2016-03-25 30227453 GED903EDL 400001913180 Q2 Satisfied 2016-03-25 30227453 GED903EDL 400001913180 Q3 Not Satisfied 2016-03-25 34622968 DAED19FDE 400004775250 Q1 Satisfied 2016-03-25 34622968 DAED19FDE 400004775250 Q2 Satisfied 2016-03-25 34622968 DAED19FDE 400004775250 Q3 Satisfied 2016-03-25 

S'il vous plaît aidez-moi avec la sortie de désir suivante pour les rapports en utilisant la procédure SQLstored:

 CLI CallerID Customer_Account Q1 Q2 Q3 Date 34622968 F22141B854 400004775250 Satisfied Not-Satisfied Not-Satisfied 2016-03-25 30227453 GED903EDL 400001913180 Not-Satisfied Satisfied Not-Satisfied 2016-03-25 34622968 DAED19FDE 400004775250 Satisfied Satisfied Satisfied 2016-03-25 

Notez s'il vous plaît:

L'identification de l'appelant est unique ici pour chaque appel.

En plus d'utiliser la command PIVOT , vous pouvez également utiliser l'agrégation conditionnelle:

 SELECT CLI, CallerID, Customer_Account, Q1 = MAX(CASE WHEN Question = 'Q1' THEN Feedback END), Q2 = MAX(CASE WHEN Question = 'Q2' THEN Feedback END), Q3 = MAX(CASE WHEN Question = 'Q3' THEN Feedback END), Date FROM NPS_Feedback GROUP BY CLI, CallerID, Customer_Account, Date 

DÉMO EN LIGNE

Une simple requête PIVOT fonctionnera.

 select CLI,CallerID,Customer_Account, [Q1],[Q2],[Q3], Date from ( select CLI,CallerID,Customer_Account,Question,Feedback,Date from [NPS_Feedback] )s pivot ( max(Feedback) for Question in ([Q1],[Q2],[Q3]) ) p