很抱歉,如果这是一个n00b问题。我不是T-SQL专家,但我有一个工作的理解。我打算尽力说清楚,但开始时有点混乱。
我有两张桌子。表A表示项目,表B表示项目之间的关系。
表A:ItemID,Name,......
表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
我希望返回的结果按父项的名称分组,然后是“this”项目名称,然后是子项目的名称......在这种情况下:
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)
如何在保持分组的同时在同一字段(表A.Name)上使用ORDER BY
?
我读过这个:SQL Ordering by Date but Maintain Foreign Key Groupings但我不认为答案符合我的问题。我在这里和谷歌上查找了我的问题,但我找不到重复的内容。
答案 0 :(得分:1)
您需要将表连接在一起,以便将表B
中的ID与表A
中的名称相关联。由于表B
中有三个不同的ID链接到表A
,因此您需要三次加入表A
。为了保持组织有序,我建议使用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
示例输出(DEMO):
PARENTID | THISID | CHILDID
-----------------------
2 | 4 | 5
1 | 2 | 3
1 | 2 | 5
1 | 2 | 4
1 | 3 | 5
1 | 3 | 4