Вы можете использовать PIVOT
для получения желаемых результатов.Есть два способа: статическая сводка, с помощью которой вы жестко кодируете столбцы, или динамическая сводка, которая получает список столбцов во время выполнения.
статическая сводка: (см. SQL Fiddle с демоверсией )
create table tblUser
(
userid int,
fname varchar(10),
lname varchar(10),
mobile int,
questionid int,
choiceid int
)
insert into tblUser values (001, 'xx', 'yy', 03212, 01, 01)
insert into tblUser values (001, 'xx', 'yy', 03212, 02, 02)
insert into tblUser values (002, 'xxx', 'yyy', 03425, 01, 02)
insert into tblUser values (002, 'xxx', 'yyy', 03425, 02, 01)
insert into tblUser values (003, 'xxxx', 'yyyy', 03429, 03, 02)
insert into tblUser values (003, 'xxxx', 'yyyy', 03429, 03, 01)
create table tblResults
(
questionid int,
question varchar(10),
choiceid int,
choice varchar(10)
)
insert into tblresults values (01, 'Are you', 01, 'Male')
insert into tblresults values (01, 'Are you', 02, 'Female')
insert into tblresults values (02, 'From', 01, 'xxxxx')
insert into tblresults values (02, 'From', 02, 'yyyyy')
select *
from
(
select u.userid,
u.fname,
u.lname,
u.mobile,
r.question,
r.choice
from tbluser u
left join tblresults r
on u.questionid = r.questionid
and u.choiceid = r.choiceid
) x
pivot
(
min(choice)
for question in([are you], [from])
) p
Динамическая опора: (См. SQL Fiddle с демо )
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question)
FROM tblresults c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from
(
select u.userid,
u.fname,
u.lname,
u.mobile,
r.question,
r.choice
from tbluser u
left join tblresults r
on u.questionid = r.questionid
and u.choiceid = r.choiceid
) x
pivot
(
min(choice)
for question in (' + @cols + ')
) p '
execute(@query)
Оба будутдают такие же результаты.