表A中有多个值的SQL查询,其说明在表B中
我有一个表a(区域)就是这样设计的表A中有多个值的SQL查询,其说明在表B中,sql,sql-server,Sql,Sql Server,我有一个表a(区域)就是这样设计的 <Territory> <Group_ID1> <Group_ID2> <Group_ID3> <Group_ID4> Northwest 1 2 North 1 Southwest 4 2 South 4 Other 使用左外连接
<Territory> <Group_ID1> <Group_ID2> <Group_ID3> <Group_ID4>
Northwest 1 2
North 1
Southwest 4 2
South 4
Other
使用左外连接解决您的问题。请尝试以下查询
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
进行必要的额外联接以满足表设计(即,组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
@realnumber3012到问题左侧的给定db结构外部联接是解决方案。如果表结构有问题,您必须在问题上留下此类注释。@sahalMoidu我相信您的答案是正确的,我甚至没有想过多次联接组表(noob),但使用该查询我得到了一个“[Microsoft][ODBC驱动程序管理器]功能序列错误“@JoeS您的数据库是什么。SQL Server??您是如何执行此查询的。它的COBOL数据库具有一个名为Relativity的关系覆盖。您的答案是正确的,我只需稍微重新格式化查询bit@sahalMoidu最后一个查询是
code
选择T.Territory描述作为Territory,TG1.GroupDescription作为Group1Desc,TG2.GroupDescription作为Group2Desc,TG3.GroupDescription作为Group3Desc,TG4.GroupDescription作为Group4Desc,TG5.GroupDescription作为Group5Desc从Territory T左加入TerritoryGroup T上的TG1.TerritoryGroup\u Id=TG1.TerritoryGroup\u Id左加入TerritoryGroup TG2.TerritoryGroup\u Id左加入T.TerritoryGroup上的TerritoryGroup TG3itoryGroup3\u Id=TG3.TerritoryGroup\u Id在T.TerritoryGroup 4\u Id=TG4.TerritoryGroup\u Idcode
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
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