次のようなテーブルがあります。
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 | mauriiciobarbosa@gmail.com
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 | mauriiciobarbosa@gmail.com | 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]
いくつかの動的なピボットの例を見つけましたが、私の特定のケースには当てはまりませんでした。どんな助けでも大歓迎です。ありがとう。
編集:
Prdp のおかげで、あと少しです。これは今までの動的ピボット コードです。
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)