0

首先,感谢您抽出时间阅读本文,请原谅标题,我不太确定如何描述我的问题。

我有两张桌子。一个用于 SystemUsers,另一个用于 PrintingPermissions。

打印权限表

ID ---- SystemUserID --- PrintGroupTypeID --- CanPrint
1 ----------- 22 ----------- -- 1 -------------------真

2 ---------- 22-------------- 2 ---------- - - - - -真的

3 ----------- 22 ------------- 3 ------------ - - - - 错误的

4 ----------- 23 ------------- 1 ------------ - - - - 真的

.

.

系统用户表

ID ----------- 姓名
22 ------------ 罗伯特

23 --------- 约翰

24 ------------ 西蒙

25 --------- 凯特

我需要一个选择查询,它将根据 PrintingPermissions.PrintGroupTypeID 生成所有用户及其 PrintPermissions 的列表。需要注意的是,如果用户未列在 PrintPermissions 表中,我仍然希望创建他们的对象,但 CanPrintValue 为 FALSE 或 NULL。

即,在选择printGrouPtypeID = 1的位置时,上面提供的表数据的输出应如下所示。

.

.

结果(其中 PrintGroupTypeID = 1)

名称----- SystemUserID ----- CanPrint

罗伯特 --------- 22 -------- 真

约翰 ----------- 23 --------- 是的

Simon --------- 24 --------- False //-- 不在权限表中,默认 false 创建

Kate ----------- 25 --------- False //-- 不在权限表中,默认为 false

再次感谢您抽出宝贵时间,如果您不完全理解我想要达到的目标,请告诉我。

4

3 回答 3

1
SELECT DISTINCT su.Name, su.ID, ISNULL(pp.CanPrint, CAST 0 AS BIT) as CanPrint
FROM SystemUser su 
LEFT JOIN Printing Permissions pp ON su.ID = pp.SystemUserID AND pp.PrintGroupTypeID = @TargetPrintGroupTypeID

如果你想要 null 而不是 false,你可以省略 ISNULL 函数,直接选择 CanPrint。这将为您提供三种状态结果(true、false、null),并允许您确定哪些用户被禁止(false)以及哪些用户不在打印组中(null)。

于 2012-12-10T15:40:15.540 回答
1

怎么样:

Select s.name as name,
       s.id as SystemUserID,
       isnull(p.canprint, 'false') as CanPrint
  From systemusers s
  Left outer Join printingpermissions p on s.id = p.systemuserid
 Where p.printgrouptypeid = 1
于 2012-12-10T15:40:17.533 回答
1

好的,我刚刚设法解决了。

这是查询:

SELECT        SystemUsers.Name, ISNULL(PrintingPermissions.CanPrint, 'FALSE') AS CanPrint
FROM            SystemUsers LEFT OUTER JOIN
                         PrintingPermissions ON SystemUsers.ID = PrintingPermissions.SystemUserID AND 
                         PrintingPermissions.PrintingGroupTypeID = @ID
于 2012-12-10T15:40:50.467 回答