首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对字段进行多次排序?

如何对字段进行多次排序?
EN

Stack Overflow用户
提问于 2018-04-16 23:37:25
回答 3查看 332关注 0票数 1

我有一个SQL Server表业余爱好,如下所示:

代码语言:javascript
复制
id        hobby        skills          organization
-------------------------------------------------------
1         reading      encoding        greenpeace
2         cooking      web design      red cross
3         baking       programming     convoy of hope

我想要一个查询,结果如下:

代码语言:javascript
复制
 hobby        skills          organization
------------------------------------------------
 reading      programming     greenpeace
 cooking      web design      red cross
 baking       encoding        convoy of hope

爱好按提升中的id分类,技能在降序中按id排序,最后在提升中按id排序。

有可能这样做吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-17 00:29:04

这是一个非常奇怪的数据组织,但如果您坚持,可以这样做,例如,使用ROW_NUMBER函数。

示例数据-我添加了您在注释中提到的employeenumber

代码语言:javascript
复制
DECLARE @T TABLE (
id int, 
hobby nvarchar(255), 
skills nvarchar(255), 
organization nvarchar(255), 
employeenumber int);

INSERT INTO @T VALUES
(11, 'reading', 'encoding   ', 'greenpeace    ', 123),
(12, 'cooking', 'web design ', 'red cross     ', 123),
(13, 'baking ', 'programming', 'convoy of hope', 123),
(21, 'reading', 'encoding   ', 'greenpeace    ', 222),
(22, 'cooking', 'web design ', 'red cross     ', 222),
(23, 'baking ', 'programming', 'convoy of hope', 222);

查询

代码语言:javascript
复制
WITH
CTE
AS
(
    SELECT
        id
        ,hobby
        ,skills
        ,organization
        ,ROW_NUMBER() OVER (ORDER BY id ASC) AS rn_asc
        ,ROW_NUMBER() OVER (ORDER BY id DESC) AS rn_desc
    FROM @T AS hobbies
    WHERE employeenumber = 222
)
SELECT
    C1.id
    ,C1.hobby
    ,C2.skills
    ,C1.organization
FROM
    CTE AS C1
    INNER JOIN CTE AS C2 ON C2.rn_desc = C1.rn_asc
ORDER BY C1.rn_asc;

结果

代码语言:javascript
复制
+----+---------+-------------+----------------+
| id |  hobby  |   skills    |  organization  |
+----+---------+-------------+----------------+
| 21 | reading | programming | greenpeace     |
| 22 | cooking | web design  | red cross      |
| 23 | baking  | encoding    | convoy of hope |
+----+---------+-------------+----------------+
票数 1
EN

Stack Overflow用户

发布于 2018-04-16 23:41:14

桌子不是这样工作的。你的每一个元组(id,业馀爱好,技能,组织)构成一排。您可以更改(整行)的顺序,但不能在任意条件下独立地对列进行排序。

票数 0
EN

Stack Overflow用户

发布于 2018-04-17 01:55:11

这不是表的工作方式,但可以做到这一点。一种方法是聚合和union all

代码语言:javascript
复制
select max(hobby) as hobby, max(skills) as skills,
       max(organization) as organization
from ((select row_number() over (order by id asc) as seqnum, hobby, NULL as skills, organization
       from hobbies
      ) union all
      (select row_number() over (order by id desc), NULL, skills, NULL
       from hobbies
      )
     ) h
group by seqnum
order by seqnum;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49867704

复制
相关文章

相似问题

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