Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
表A中有多个值的SQL查询,其说明在表B中_Sql_Sql Server - Fatal编程技术网

表A中有多个值的SQL查询,其说明在表B中

表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 使用左外连接

我有一个表a(区域)就是这样设计的

<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 Id
code
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