小编Joe*_*oel的帖子

得到连接的倒数?

我使用的是SQL Server 2005.我有三个表 - Users,Groups和GroupUsers.GroupUsers包含用于多对多关系的两个PK.

我有一个视图来获取组的所有用户信息,如下所示:

SELECT * FROM GroupUsers JOIN Users ON GroupUsers.UserID = Users.UserId
Run Code Online (Sandbox Code Playgroud)

我想创建此视图的反转 - 我想要一个未附加到特定组的所有用户的列表.以下查询将完成此任务:

SELECT * FROM Users WHERE UserID NOT IN 
    (SELECT UserID FROM GroupUsers WHERE GroupID=@GroupID)
Run Code Online (Sandbox Code Playgroud)

但是我不想指定组,我想知道如何将其转换为加入GroupID然后是UsersID和所有用户信息的视图,但仅限于非连接用户.

我不知道如何做到这一点,也许是EXCEPT运算符的东西?

更新:

我认为这是我的解决方案,除非有人想出更好的东西:

SELECT 
   G.GroupId,
   U.*
FROM
   Groups G
CROSS JOIN
   Users U
WHERE
   U.UserId NOT IN 
     (
        SELECT 
           UserId
        FROM
           GroupUsers
        WHERE
           GroupId=G.GroupId
     )
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server join sql-server-2005

19
推荐指数
2
解决办法
3万
查看次数

订购问题的T-SQL SELECT DISTINCT&ROW_NUMBER()

我正在尝试使用ROW_NUMBER()OVER从视图中选择DISTINCT行进行分页.当我将ORDER BY字段从SMALLDATETIME切换到INT时,我开始得到奇怪的结果:

SELECT RowId, Title, HitCount FROM
( SELECT DISTINCT Title, HitCount, ROW_NUMBER() OVER(ORDER BY HitCount DESC) AS RowId FROM ou_v_Articles T ) AS Temp
WHERE RowId BETWEEN 1 AND 5
Run Code Online (Sandbox Code Playgroud)

此查询返回:

RowId | Title | HitCount
=======================
4  ---  9
1  ---  43
3  ---  11
2  ---  13
5  ---  0
Run Code Online (Sandbox Code Playgroud)

结果显然不是正确的顺序.我不确定这里有什么问题,但当我删除DISTINCT时,它正确地命令它们.

谢谢.

t-sql sql-server paging

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

sql-server ×2

t-sql ×2

join ×1

paging ×1

sql ×1

sql-server-2005 ×1