2016-04-26 5 views
1

Это автоматическая база данных обратной связи, которая хранит отзывы клиентов по каждому вопросу.SQL Sub Queries/Self Join

Я использую SQL Server 2012 У меня есть следующие данные в имени таблицы [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 

Пожалуйста, помогите мне с следующим выводом желания для отчетов с использованием процедуры 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 

Пожалуйста, обратите внимание:

Caller ID уникален для каждого звонка.

+0

ЗАКАНЧИВАТЬ оператор PIVOT – Squirrel

+0

Используйте Pivot. Q1, Q2, Q3 исправить или может быть больше типа обратной связи. – KumarHarsh

ответ

1

Помимо использования команды PIVOT, вы можете также использовать условную агрегацию:

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 

ONLINE DEMO

+0

Сэр Мне нужно все они в одной строке ...! – BilalAhmed

+0

@BilalAhmed, в чем проблема с моим ответом? Проверьте демонстрационную версию. –

+1

Спасибо, сэр, это была моя ошибка. У меня была DateTime, и время было другим, поэтому он показывал каждую запись в отдельной строке. Отметьте это как ответ ...! – BilalAhmed

0

Простой запрос PIVOT будет работать.

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 
+0

Пожалуйста, ознакомьтесь с этим описанием (Неправильный синтаксис рядом с «p») – BilalAhmed

+0

Дорогой он показывает записи в разных строках каждый. Пожалуйста, направляйте меня, чтобы показать скриншот. Можно ли прикрепить Скриншот здесь .. ?? – BilalAhmed

+0

@BilalAhmed Этого не может быть. Вы, должно быть, что-то пропустили – DhruvJoshi