如果您使用的是RDBMS與PIVOT
功能(SQL Server 2005的+/Oracle的),那麼你可以使用:
select Id, [1] As Question1, [2] as Question2
from
(
SELECT su.Id
,rp.QuestionId
,rp.AnswerId
FROM SiteUser su
INNER JOIN Response rp
ON su.Id = rp.SiteUserId
INNER JOIN Answer an
ON rp.AnswerId = an.Id
) src
pivot
(
max(AnswerId)
for QuestionId in ([1], [2])
) piv
如果您使用的是SQL Server中你有數目不詳的問題ID的值然後你可以使用動態SQL來獲得相同的結果:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT distinct ', ' + QUOTENAME(QuestionId)
from Response
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @colsFinal = STUFF((SELECT distinct ', ' + QUOTENAME(QuestionId) + ' as Question'+QuestionId
from Response
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT id, ' + @colsFinal + ' from
(
SELECT su.Id
,rp.QuestionId
,rp.AnswerId
FROM SiteUser su
INNER JOIN Response rp
ON su.Id = rp.SiteUserId
INNER JOIN Answer an
ON rp.AnswerId = an.Id
) src
pivot
(
max(AnswerId)
for QuestionId in (' + @colsPivot + ')
) p '
execute(@query)
你正在使用什麼RDBMS?樞軸運算符是供應商特定的。 –
是否總是隻有兩個可能的questionIDs?有一種方法可以動態編寫它,以便能夠處理任意數量的questionID。 –
MS SQL Server 2008 R2 –