Sql 我如何找出具有特定角色ID且';在某个时间间隔内未激活?

Sql 我如何找出具有特定角色ID且';在某个时间间隔内未激活?,sql,sql-server,tsql,Sql,Sql Server,Tsql,下面的查询将告诉我在一段时间内有多少非活动用户 USE Database SELECT u.* FROM [dbo].[tbl_Users] u WHERE NOT EXISTS (SELECT 1 FROM [dbo].[CaseTable] ct WHERE c.tUserID = u.UserID AND ct.CreationDate between '2019-01-01' and '2019-12-31'

下面的查询将告诉我在一段时间内有多少非活动用户

USE Database
SELECT u.*
FROM [dbo].[tbl_Users] u
WHERE NOT EXISTS (SELECT 1
                  FROM [dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID AND ct.CreationDate between '2019-01-01' and '2019-12-31' 
             );
下面的查询将告诉我哪些用户具有我要查找的特定角色id

Use Database;

SELECT UserID, DepartmentID, RoleId
FROM tbl_UsersBelongsTo
WHERE RoleID=6

如何集成这两个查询并从本质上获得我想要的?我想它是带有一个
连接
子句的,但是如何使用呢???

请尝试使用如下的内部连接:

SELECT u.*
FROM [dbo].[tbl_Users] u
INNER JOIN 
(
   SELECT UserID
   FROM tbl_UsersBelongsTo
   WHERE RoleID=6
) x ON u.UserID = x.UserID
WHERE NOT EXISTS (SELECT 1
                  FROM [dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID AND ct.CreationDate between '2019-01-01' and '2019-12-31' 
             );

我想您只想加入
或其他
存在

SELECT u.*
FROM [dbo].[tbl_Users] u
WHERE NOT EXISTS (SELECT 1
                  FROM [dbo].[CaseTable] ct
                  WHERE ct.tUserID = u.UserID AND
                        ct.CreationDate between '2019-01-01' and '2019-12-31' 
             ) AND
     EXISTS (SELECT 1
             FROM tbl_UsersBelongsTo ubt
             WHERE ubt.RoleID = 6 AND ubt.userId = u.userId
            );

您可以阅读有关
联接的更多信息

如果我理解正确-您使用的是两个不同的数据库,第二个数据库的名称是
pisacara
。只要SQL Server中的不同数据库位于同一台服务器上,并且您对这两个数据库使用相同的凭据,就可以连接这些数据库中的表

假设
tbl_Users
表也有一个
UserID
字段,则查询如下所示:

SELECT u.*
FROM [1st_database_name].[dbo].[tbl_Users] u
INNER JOIN [piscara].[dbo].[tbl_UsersBelongsTo] a
ON u.UserID = a.UserID
WHERE NOT EXISTS (SELECT 1
                  FROM [1st_database_name].[dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID 
                  AND ct.CreationDate BETWEEN'2019-01-01' AND'2019-12-31' 
             )
AND a.RoleID=6;
您还可以尝试将第二个查询作为子查询放入
WHERE
子句中,如下所示:

SELECT u.*
FROM [1st_database_name].[dbo].[tbl_Users] u
WHERE NOT EXISTS (SELECT 1
                  FROM [1st_database_name].[dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID 
                  AND ct.CreationDate BETWEEN'2019-01-01' AND'2019-12-31' 
             )
AND u.UserID IN (SELECT UserID
                FROM [piscara].[dbo].[tbl_UsersBelongsTo]
                WHERE RoleID=6);

样本数据和预期结果将有所帮助。