MSSQL连接表有点

时间:2013-06-11 00:20:24

标签: sql-server sql-server-2008 join pivot sqlfiddle

我有三张桌子: 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是可能的,但是我很难找到合适的代码。

1 个答案:

答案 0 :(得分:0)

您可以使用PIVOT函数,但必须cast allowedbit数据类型以外的其他内容。例如,下面将其转换为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;

请参阅SQL Fiddle with Demo