【问题标题】:Proper Orderby for query查询的正确排序
【发布时间】:2013-05-16 15:04:12
【问题描述】:

鉴于以下情况:

Create Table Person
(
     ID         int ,
     Lastname   varchar(32),
     Firstname  varchar(32)
);

Create Table Families
(
     ID int,
     PersonId_fk int,
     IsHeadOfHousehold bit
);

Insert into Person Values(1, 'Smith', 'John');
Insert into Person Values(4, 'Johnson', 'Sue');
Insert into Person Values(2, 'Smith', 'Jane');
Insert into Person Values(3, 'Towmater', 'Billy');

Insert into Families Values(1, 1, 1);
Insert into Families Values(1, 2, 0);
Insert into Families Values(1, 3, 0);
Insert into Families Values(1, 4, 0);

我无法按以下顺序显示结果。我正在尝试做的是让一家之主先出现,然后是同姓的任何人,最后是其他所有人都按姓氏排序

Smith     John      1
Smith     Jane      0
Johnson   Sue       0
Towmater  Billy     0

我试过了

SELECT LastName, FirstName, IsHeadOfHousehold
FROM families f
join person p
on f.PersonID_fk = p.ID
where f.Id = 1
Order by IsHeadOfHousehold DESC, LastName, FirstName

这让我很接近,但没有让我得到我想要的。

【问题讨论】:

  • 为什么是where f.id = 1
  • eric :因为那是我想要的人名单的家庭。实际上,此表中有许多不同的族
  • 你得到什么输出?什么顺序?

标签: sql sql-server sql-order-by


【解决方案1】:

由于您使用的是 SQL Server,如果您使用的是 2005+,您应该可以使用row_number() 来订购数据:

SELECT LastName, FirstName, IsHeadOfHousehold
FROM families f
join person p
  on f.PersonID_fk = p.ID
where f.Id = 1
order by IsHeadOfHousehold desc, 
  row_number() over(partition by lastname order by IsHeadOfHousehold desc) desc, 
  lastname, firstname;

SQL Fiddle with Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多