我有一个设计为这样的表A(Territory)
<Territory> <Group_ID1> <Group_ID2> <Group_ID3> <Group_ID4>
Northwest 1 2
North 1
Southwest 4 2
South 4
Other
和包含组描述的表B(区域组)
<Group_ID> <Group_Description>
1 North
2 West
4 South
我需要编写一个查询,它将选择表A中的所有记录,并在此处显示它到达Group表(B)的ID并撤回描述。当我尝试将表A中的所有ID加入表B时,它不可避免地排除所有行。我只给出了表A的简要布局,但是有50多行,有些有0个Group_ID,有些有4个Group_ID。
我可以使用嵌入的select语句执行select语句吗?
Select Territory,
(Select Group_Description
from Territory_Group where Group_ID = Group_ID1) as "Group1_Description, etc etc
FROM Territory
答案 0 :(得分:0)
使用左外连接来解决您的问题。请尝试以下查询
select Territory, G1.Group_Description as desc1 , G2.Group_Description as desc2 , G3.Group_Description as desc3 , G4.Group_Description as desc4
from Territory T
left outer join [Territory_Group] G1 on T.Group_ID1 = G1.Group_ID
left outer join [Territory_Group] G2 on T.Group_ID2 = G2.Group_ID
left outer join [Territory_Group] G3 on T.Group_ID3 = G3.Group_ID
left outer join [Territory_Group] G4 on T.Group_ID4 = G4.Group_ID
进行必要的额外连接以满足您的桌面设计(即group0或任何其他组)
答案 1 :(得分:0)
你不需要在第一张桌子 在第二个表中添加字段“territory” 并使用像这样的查询
SELECT territory,
MAX(CASE WHEN group_id = 1 THEN Group_Description ELSE '' END) AS desc1,
MAX(CASE WHEN group_id = 2 THEN Group_Description ELSE '' END) AS desc2,
MAX(CASE WHEN group_id = 3 THEN Group_Description ELSE '' END) AS desc3,
MAX(CASE WHEN group_id = 4 THEN Group_Description ELSE '' END) AS desc4
FROM territory_groups
GROUP BY territory