-2

私は3つのテーブルを持っています: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

最初のテーブルは、ユーザー情報を含むユーザー テーブルです。2 番目のテーブルは、アプリケーションのフォーム名を格納するフォーム テーブルです。3 番目のテーブルは、どのユーザーがどのフォームを開くことが許可されているかを示すユーザー レベルのテーブルです。

次のような単一のテーブルですべての情報を確認できる SQL クエリを作成したいと考えています。

UserId USerName   Edit  Cafe BackOffice
  1      mike      0     1      1  
  2      john      1     1      0

SQL Fiddle と Pivot で可能だと思いますが、正しいコードを理解するのに苦労しています。

4

1 に答える 1

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;

デモで SQL Fiddle を参照してください

于 2013-06-11T00:37:16.630 に答える