-2

我有三个表:1)UserTable

UserId UserName 
  1      Mike
  2      John
  3      Jennifer

2) 表格名称

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 是可能的,但我很难找出正确的代码。

4

1 回答 1

0

您可以使用 PIVOT 函数,但您必须castallowed列转换为数据类型以外的内容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;

请参阅带有演示的 SQL Fiddle

于 2013-06-11T00:37:16.630 回答