我有三张桌子: 1)UserTable
UserId UserName
1 Mike
2 John
3 Jennifer
2)FormName
fID fName
1 edit
2 cafe
3 backoffice
3)形成用户
fId UserId Allowed(bit)
1 1 0
2 1 1
3 1 1
2 2 1
3 2 0
第一个表是包含用户信息的用户表。 第二个表是表单,用于存储应用程序的表单名称 第三个表是用户级表,其中说明允许哪个用户打开哪个表单。
我想创建sql查询,我可以在单个表中看到所有信息,如:
UserId USerName Edit Cafe BackOffice
1 mike 0 1 1
2 john 1 1 0
我认为SQL Fiddle和Pivot是可能的,但是我很难找到合适的代码。
答案 0 :(得分:0)
您可以使用PIVOT函数,但必须cast
allowed
列bit
数据类型以外的其他内容。例如,下面将其转换为int
:
select userid, username,
coalesce(Edit, 0) Edit,
coalesce(Cafe, 0) Cafe,
coalesce(BackOffice, 0) BackOffice
from
(
select u.userid,
u.username,
f.fname,
cast(allowed as int) allowed
from usertable u
inner join user_form uf
on u.userid = uf.userid
inner join formname f
on uf.fid = f.fid
) d
pivot
(
max(allowed)
for fname in (Edit, Cafe, BackOffice)
) piv;