У меня есть таблица, которая выглядит следующим образом:Динамически «Стержень» строк в столбцы - SQL Server
DtCreated | UserName | Question | Answer
2016-09-24 14:30:11.927 | mauricio | Senha | 99658202
2016-09-24 14:30:11.927 | mauricio | Inteiro | 10
2016-09-24 14:30:11.927 | mauricio | Telefone | (915) 438-05
2016-09-24 14:30:11.927 | mauricio | Email | [email protected]
2016-09-24 14:30:11.927 | mauricio | Texto Livre | nksnksjksj nsjsnsjjs
2016-09-24 14:30:11.927 | mauricio | Decimal | 0.9
Как я могу использовать стержень, чтобы преобразовать эти данные в это?
DtCreated | UserName | Senha | Inteiro | Telefone | Email | Texto Livre | Decimal
2016-09-24 14:30:11.927 | mauricio | 99658202 | 10 | (915) 438-05 | [email protected] | nksnksjksj nsjsnsjjs | 0.9
PS: колонка «Вопрос» имеет динамически создаваемые ценности и данные должны быть сгруппированы по «DtCreated» и поля «Имя пользователя».
Это код SQL я использую прямо сейчас:
SELECT
sf.[DtCreated],
sf.[UserName],
fc.Title as Question,
sv.Value as Answer
FROM [form].[SubmissionForm] sf
inner join [form].[Submission] s on
sf.id = s.SubmissionForm_Id
inner join [form].[FormComponent] fc on s.FormComponentId = fc.Id
inner join [form].[SubmissionValue] sv on s.Id = sv.Submission_Id
where sf.Id = '0DBA8590-C33E-48F8-9E64-C68EEFC536FF'
order by sf.[DtCreated]
Я нашел некоторые динамические примеры поворота, но не мог вместить их в моем конкретном случае. Любая помощь будет оценена по достоинству. Спасибо.
EDIT:
Благодаря ППРР, я почти там. Это динамический поворотный код «сезам Сейчас:
DECLARE @sql VARCHAR(max)='',
@col_list VARCHAR(8000)=''
SET @col_list = (SELECT DISTINCT Quotename(fc.Title) + ','
FROM [form].[SubmissionForm] sf
inner join [form].[Submission] s on
sf.id = s.SubmissionForm_Id
inner join [form].[FormComponent] fc on s.FormComponentId = fc.Id
inner join [form].[SubmissionValue] sv on s.Id = sv.Submission_Id
FOR xml path(''))
SET @col_list = LEFT (@col_list, Len(@col_list) - 1)
SET @sql = 'select [DtCreated],[UserName]' + @col_list
+ ' from (SELECT
sf.[DtCreated],
sf.[UserName],
fc.Title,
sv.Value
FROM [form].[SubmissionForm] sf
inner join [form].[Submission] s on
sf.id = s.SubmissionForm_Id
inner join [form].[FormComponent] fc on s.FormComponentId = fc.Id
inner join [form].[SubmissionValue] sv on s.Id = sv.Submission_Id
) pivot (max([sv.Value]) for [fc.Title] in ('
+ @col_list + '))pv'
EXEC(@sql)
Пожалуйста, удалите картинку и добавить образец данных в текстовом формате –
Вы можете использовать динамический стержень или динамическую перекрестную вкладку для такого рода вещей. На это ответили тысячи раз в SO и других местах по всему Интернету. –
У меня возникли проблемы с преобразованием этого кода sql. Можете ли вы показать мне пример кода? Благодарю. – thiago