首先,感谢您抽出时间阅读本文,请原谅标题,我不太确定如何描述我的问题。
我有两张桌子。一个用于SystemUsers,另一个用于PrintingPermissions。
打印权限表
ID----SystemUserID---PrintGroupTypeID---CanPrint
1----------------22-----------------True
2----------------22 2-----------------真正的
3----------------22----------------------------------错误
4----------------23----------------1----------------真正的
系统用户表
ID---------名称
22----------Robert
23---------John
24----------Simon
25----------------Kate
我需要一个选择查询,它将基于PrintingPermissions.PrintGroupTypeID生成所有用户及其PrintPermissions的列表。需要注意的是,如果用户没有列在PrintPermissions表中,我仍然希望创建他们的对象,但CanPrintValue为FALSE或NULL。
即,当选择WHERE PrintGroupTypeID=1时,上面提供的表数据的输出应该如下。
RESULT(其中PrintGroupTypeID=1)
名称----系统用户ID---CanPrint
Robert--------22--------------------真正的
John---------------23--------------------真正的
Simon--------24--------------------错误//--不在权限表中,创建默认错误
Kate----------------25--------------------False//--不在权限表中,创建默认False
再次感谢您抽出时间,如果您不完全理解我想要实现的目标,请告诉我。
Rob
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)。
怎么样:
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
好的,我刚刚解决了。
以下是查询:
SELECT SystemUsers.Name, ISNULL(PrintingPermissions.CanPrint, 'FALSE') AS CanPrint
FROM SystemUsers LEFT OUTER JOIN
PrintingPermissions ON SystemUsers.ID = PrintingPermissions.SystemUserID AND
PrintingPermissions.PrintingGroupTypeID = @ID