2

以下を考えると:

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

それは私を近づけますが、私が望むものを私に与えません。

4

1 に答える 1

2

row_number()SQL Server を使用しているため、2005 以降を使用している場合は、データの順序付けに使用できるはずです。

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 を参照してください

于 2013-05-16T15:10:43.803 に答える