1

对不起,如果这是一个 n00b 问题。我不是 T-SQL 专家,但我有一个工作理解。我会试着把这一点说清楚,但一开始有点令人困惑。

问题

我有两张桌子。表 A 表示一个项目,表 B 表示项目之间的关系。

表 A:项目 ID、名称、...

表 B:ParentID、ThisID、ChildID

我面临的问题是表 B 中的所有三个 ID 都指向表 A 中的主键,但是我需要按 A.Name 为每个关系角色按组对结果进行排序(如果有意义的话)。

所以,如果表 A 有:

1 ItemZ
2 ItemA
3 ItemD
4 ItemX
5 ItemT

表 B 有:

1 3 5
1 2 4
1 3 4
1 2 3
2 4 5
1 2 5

我希望返回的结果按父项目的名称分组,然后是“这个”项目名称,然后是子项目的名称......在这种情况下:

2(A) 4(X) 5(T)
1(Z) 2(A) 3(D)
1(Z) 2(A) 5(T)
1(Z) 2(A) 4(X)
1(Z) 3(D) 5(T)
1(Z) 3(D) 4(X)

问题

如何ORDER BY在保持分组的同时在同一字段(表 A.Name)上使用?

笔记

我读过这个:SQL Ordering by Date but Maintain Foreign Key Groupings,但我认为答案不适合我的问题。我在此处和 Google 上查找了我的问题,但找不到重复项。

4

1 回答 1

1

您需要将表连接在一起,以便可以将 Table 中的 ID 与 TableB中的名称链接起来A。由于您在 Table 中有三个不同的 IDB链接到 Table A,因此您需要加入 TableA三次。为了使事情井井有条,我建议使用别名,如A_Parent, A_Child, A_This。这是一个应按预期排序的示例:

select
  B.ParentID, B.ThisID, B.ChildID
from
  TableB B
join
  TableA A_Parent on A_Parent.ItemID = B.ParentID
join
  TableA A_This on A_This.ItemID = B.ThisID
join
  TableA A_Child on A_Child.ItemID = B.ChildID
order by
  A_Parent.Name, A_This.Name, A_Child.Name

样本输出(演示):

PARENTID | THISID | CHILDID
-----------------------
  2      |  4     |  5
  1      |  2     |  3
  1      |  2     |  5
  1      |  2     |  4
  1      |  3     |  5
  1      |  3     |  4
于 2013-03-05T22:11:58.093 回答