sql-server - 如何在SQL Server中选择男性和女性

标签 sql-server sql-server-2012

我有一个关于SQL Server的问题:如何获取男女数据的交替数据

CREATE TABLE [dbo].[EmpGenders]
(
    [id] [INT] NULL,
    [Name] [VARCHAR](50) NULL,
    [Gender] [VARCHAR](50) NULL
) 

INSERT INTO [dbo].[EmpGenders] ([id], [Name], [Gender]) 
VALUES (1, N'Manish', N'Male'), (2, N'Nayak', N'Male'),
       (3, N'Martin', N'Male'), (4, N'Roy', N'Male'),
       (5, N'Hardik', N'Male'), (6, N'Manisha', N'Female'),
       (7, N'Kruti', N'Female'), (8, N'Maria', N'Female')

根据上面的数据,我想要这样的输出:

Id | Name    | Gender 
---+---------+---------
1  | Manish  | Male
6  | Manisha | Female
2  | Nayak   | Male
7  | Kruti   | Female
3  | Martin  | Male
8  | Maria   | Female
4  | Roy     | Male
5  | Hardik  | Male 

我试过这个 SQL 语句:

select 
    id, name, gender  
from 
    (select 
         *,
         row_number() over (order by id, gender) as rn
     from  
         [Test].[dbo].[EmpGenders]) a
where  
    rn % 2 = 1 

union all

select 
    id, name, gender  
from 
    (select 
         *, row_number() over (order by id desc, gender desc) as rn
     from  
         [Test].[dbo].[EmpGenders]) a  
where  
    rn % 2 = 0

但该查询未返回预期结果。

能否请您告诉我如何在 SQL Server 中编写查询来完成此任务?

最佳答案

你能不能不...

SELECT *
FROM EmpGenders
ORDER BY ROW_NUMBER() OVER(PARTITION BY Gender ORDER BY Id),
         Gender DESC;

关于sql-server - 如何在SQL Server中选择男性和女性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55313382/

相关文章:

c# - 没有为类型 'System.Int64' 定义实例属性

sql-server - SQL转换日期时间并减去小时

sql-server - 提交事务需要太长时间?

sql - 明年的总金额 mssql

sql - 为什么SQL函数总是返回空结果集?

sql-server - TSQL XML - 在交叉应用时过滤节点 LIKE 'x'

sql-server - 创建与另一个表结构完全相同的表变量

带和不带内连接的 SQL 查询

sql - 如何设置不同时间间隔的值?

sql-server - Powershell SQL 服务器数据库连接和连接超时问题