表A中具有多个值的SQL查询,其描述在表B中

时间:2013-12-03 00:38:20

标签: sql sql-server

我有一个设计为这样的表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

2 个答案:

答案 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