首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL ORDER BY一列和mixing另一列

T-SQL ORDER BY一列和mixing另一列
EN

Stack Overflow用户
提问于 2017-01-17 21:36:36
回答 3查看 237关注 0票数 2

我真的需要你的帮助。我必须从SQL表中获取一些特定顺序的数据。所有数据都应该按KeyID按降序排序,但如果在第二列中有一些数据相同的行,则必须用另一行分隔它们。

例如,我们有这样的表:

代码语言:javascript
复制
KeyID    UserID
1         15
2         17
3         19
4         19
5         15
6         17
7         17

在结果表中,它应该是

代码语言:javascript
复制
KeyID    UserID
7         17
5         15
6         17
4         19
2         17
3         19
1         15

有没有办法做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-17 21:43:33

这不会产生您想要的类型,但它应该扩展keyid:

代码语言:javascript
复制
order by row_number() over (partition by userId order by keyid desc),
         keyid desc
票数 1
EN

Stack Overflow用户

发布于 2017-01-17 21:51:56

这应该适用于最多有2个连续记录共享相同UserID的简单情况

代码语言:javascript
复制
SELECT KeyID, UserID
FROM (
   SELECT KeyID, UserID,
          rn, COUNT(*) OVER (PARTITION BY UserID, grp ORDER BY KeyID DESC) AS rnk
   FROM (
      SELECT KeyID, UserID,
             ROW_NUMBER() OVER (ORDER BY KeyID DESC) AS rn,
             ROW_NUMBER() OVER (ORDER BY KeyID DESC) - 
             ROW_NUMBER() OVER (PARTITION BY UserID 
                                ORDER BY KeyID DESC) AS grp
      FROM mytable) AS t) AS x
ORDER BY rn + rnk, KeyID 
票数 0
EN

Stack Overflow用户

发布于 2017-01-17 22:32:01

下面的查询运行良好,符合您的预期结果。

代码语言:javascript
复制
WITH TEMP AS(
SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY USERID ORDER BY KEYID DESC)ROW,
        ROW_NUMBER()OVER(ORDER BY KEYID DESC)ROW1 
FROM    USERS
        )

SELECT  KEYID,USERID 
FROM    (
        SELECT KEYID,USERID,ROW1,ROW FROM TEMP
        WHERE ROW<>2
        UNION 
        SELECT KEYID,USERID,ROW1+1 ROW1, ROW FROM TEMP
        WHERE ROW=2
        )B
ORDER BY ROW1 ASC

下面是我的输出:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41698613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档