【发布时间】:2016-10-10 23:34:38
【问题描述】:
我处于一种我不知道该去哪里的情况。我必须编写一个查询,使其具有层次结构。
我会用一个例子来解释你-
表 A
这里我们有 3 个这样的列
Country State City
India Punjab Amristar
India Punjab Ludhiana
India Tamil Nadu Chennai
India Tamil Nadu Salem
India West Bengal Kolkata
India West Bengal Darjeeling
India Maharastra Mumbai
India Maharastra Nagpur
表 B
这里我们有 4 个这样的列
Country State City Number
India Punjab Amristar 3
India Punjab null 5
India Tamil Nadu Chennai 2
India Tamil Nadu null 4
India null null 6
现在我们必须将这两个表连接到一个层次级别,例如 -
如果两个 Country 匹配,则它们的 state 匹配,并且 City 匹配比分配给它们的 Number 匹配
如果两个国家匹配,他们的州匹配并且他们的城市不匹配(或者它在另一个表中为空),那么我们必须从表 B 中分配该数字,从而加入这两个表城市将为空,而其他两列匹配
这就像一个层次结构,我们首先匹配到最低的粒度级别,如果匹配它就可以,如果不向上一级,就像这样。
如果只有两个国家/地区匹配,那么我们必须分配其他两列为空的数字。
我上面两个的输出是这样的-
Country State City Number
India Punjab Amristar 3
India Punjab Ludhiana 5
India Tamil Nadu Chennai 2
India Tamil Nadu Salem 4
India West Bengal Kolkata 6
India West Bengal Darjeeling 6
India Maharastra Mumbai 6
India Maharastra Nagpur 6
现在我也有办法实现这一点,即,
首先我将它们都加入内部,目标列将被填充为 -
Country State City Number
India Punjab Amristar 3
India Punjab Ludhiana
India Tamil Nadu Chennai 2
India Tamil Nadu Salem
India West Bengal Kolkata
India West Bengal Darjeeling
India Maharastra Mumbai
India Maharastra Nagpur
现在我将根据国家和州以及条件加入
该目标不应填写在表 A 中,并且 City 在表 B 中为空。
这会给我这个-
Country State City Number
India Punjab Amristar 3
India Punjab Ludhiana 5
India Tamil Nadu Chennai 2
India Tamil Nadu Salem 4
India West Bengal Kolkata
India West Bengal Darjeeling
India Maharastra Mumbai
India Maharastra Nagpur
现在我将以国家为基础加入,表 A 中的目标为空,表 B 中的状态为空
我们是这样的-
Country State City Number
India Punjab Amristar 3
India Punjab Ludhiana 5
India Tamil Nadu Chennai 2
India Tamil Nadu Salem 4
India West Bengal Kolkata 6
India West Bengal Darjeeling 6
India Maharastra Mumbai 6
India Maharastra Nagpur 6
这就是我最终想要的
现在这个方法的一个问题是它基于更新。但在这里我必须做选择。
如何在 sql 中写这个。那是我的问题。
请任何人都可以在这里帮助我。
【问题讨论】:
标签: sql sql-server sql-server-2008 join