Группировать строки по идентификатору в сводном запросе - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь создать сводный запрос для отображения данных ответа на опрос из базы данных.

Вот мой запрос на данный момент:

declare
    @columns     nvarchar(max) ='',
    @sql         nvarchar(max) = '',
    @responseIDs nvarchar(max) = '';

select
    @columns+=QUOTENAME(QuestionLabel) + ','
from
    SurveyQuestions
where
    SurveyID=1
order by
    QuestionSort;

set @columns = LEFT(@columns, LEN(@columns)-1);
set @responseIDs = (select ResponseIDs from SurveyCart where SurveyCartID=7);

set @sql='
select * from ( 
    select 
        QuestionLabel, ResponseAnswer, ResponseID, AmountPaid = 
        (
            IIF(QuestionTypeID=2 and ResponseAnswer=''Yes'', QuestionValue, 0) +
            IIF(QuestionTypeID=6 and CAST(ResponseAnswer as int)>0, QuestionValue*Cast(ResponseAnswer as int), 0)
        )
    from 
        SurveyQuestions q
        inner join SurveyResponseAnswers ra 
            on q.QuestionID=ra.QuestionID
    where
        ResponseID in (' + @responseIDs + ')
) t
pivot(
    MAX(ResponseAnswer) for QuestionLabel in (' + @columns + ')
) as pivot_table;';

EXECUTE(@sql)

Вот результаты, которые я получаю

ResponseID  AmountPaid  Attending?  Select     Cost with Quantities
19          0.00            NULL    Option 3   NULL
20          0.00            NULL    Option 1    
19          25.00           Yes     NULL       NULL
20          25.00           Yes     NULL       NULL
19          30.00           NULL    NULL       3

Результаты, которые я хочу:

ResponseID  AmountPaid  Attending?  Select     Cost with Quantities
19          55.00           Yes     Option 3   3
20          25.00           Yes     Option 1    

Я хочу, чтобы для каждого идентификатора ответа была только одна строка, и где были бы пустые места в Посещаемости и стоимости. С количествами мне нужны результаты изнижние строки и суммы, которые будут добавлены вместе на основе ResponseID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...