0

我有一个名为“tax_info”的表,这个表存储了我所在城市的地税信息,它是这样的:

taxpayer_code  |  condominium_num  |  lot_area  |  built_area
-------------------------------------------------------------
0010030078-2   |     00-0          |   143      |    130
0010030079-1   |     02-7          |   283      |    57
0010030080-1   |     02-7          |   283      |    48
0010030081-1   |     02-7          |   283      |    50

纳税人代码前3位是市区,后3位是小区内的街区,如果condo号码是00-0的话,后4位可以是街区内的地段,或者是公寓,或者商店等,如果公寓编号不同于 00-0,在这种情况下,所有相同的公寓编号均指该街区内的同一地段。

我想要做的是传递“taxpayer_code”列表并获取地段的“lot_area”和“built_area”。问题是,如果这个人住在公寓里,她的公寓只是该地段总建筑面积的一小部分。因此,如果我搜索代码 0010030078%(-X 数字无关紧要),结果是:Lot Area = 143 and Built Area = 130

但如果我搜索 0010030080%,我期望的结果是:Lot Area = 283 and Built Area 155

如果我搜索 0010030078%、0010030079%,结果:地块面积 = 426 和建筑面积 285

所以数据库应该得到纳税人代码,然后查看每个通过的代码的公寓号码是否不同于 00-0,如果是,它应该将在同一区域内共享相同公寓号码的所有其他纳税人代码添加到总和中并阻止。(理想情况下,如果通过了属于不同地区或街区的税码,则应返回警告,并且如果将更多税码添加到总和中,则添加所有代码的列表会很好,但如果这太多了也没关系麻烦!)。

我是 SQL 新手,无法解决这个问题,感谢您给我的每一个帮助,谢谢!

4

1 回答 1

1

嗯。. . 使用子查询和窗口函数来添加您想要的值:

select ti.*
from (select ti.*,
             (case when condominium_num <> '00-0'
                   then sum(built_area) over (partition by condominium_num)
                   else built_area
              end) as real_built_area
      from tax_info ti
     ) ti
where . . . 
于 2020-04-02T12:08:50.937 回答