不要将表格视为“已排序”。 SQL 服务器可以根据执行计划、索引、连接等以任何顺序返回行。如果你想要一个严格的顺序,你需要一个有序的列,比如一个标识列。通常最好在选择数据时应用所需的排序。
不过M和F的交错有点棘手,需要用到ROW_NUMBER函数。
有效的 SQL Server 代码:
CREATE TABLE #GenderTable(
[Name] [nchar](10) NOT NULL,
[Gender] [char](1) NOT NULL
)
-- Create sample data
insert into #GenderTable (Name, Gender) values
('Adam', 'M'),
('Ben', 'M'),
('Casesar', 'M'),
('Alice', 'F'),
('Beatrice', 'F'),
('Cecilia', 'F')
SELECT * FROM #GenderTable
SELECT * FROM #GenderTable
order by ROW_NUMBER() over (partition by gender order by name), Gender
DROP TABLE #GenderTable
这给出了输出
Name Gender
Adam M
Ben M
Casesar M
Alice F
Beatrice F
Cecilia F
和
Name Gender
Alice F
Adam M
Beatrice F
Ben M
Cecilia F
Casesar M
如果您使用其他 DBMS,语法可能会有所不同。