我有一张表1,如下所示
ID1 ID2 Name Balance
10232 22 Building America 7000
10233 22 Long term 3400
10234 25 Capital 2300
表2如下
ID1 note Balance
10233 2 5000
10234 1 3500
代码必须首先转到表1,并检查表2中是否存在ID1,如果它不存在则选择表1中的余额。如果表2中存在,则发现该注释为1然后它仍然从表1中获取余额,如果它发现表2中的注释大于1,则它检查ID1是否有多个ID2,如果它有多个ID2,它会检查是否有其他ID1不是相同,然后添加表2中的余额和表1中的其他ID。 因此,对于ID1 = 10233,代码转到表2并发现该注释为2. 10233的相应ID2为22.然后检查是否存在包含相同ID2的任何ID1。具有相同ID2的两个ID1是10232和10233.然后,从表2中添加10233的余额,然后从表1中添加10232的余额。因此,此ID的余额为5000 + 7000 = 12,000。
对于ID 10234,它是2300,因为它发现音符是1并且仅从表1中选取。
围绕这个问题构建逻辑有很多问题,我只是坚持一堆案例陈述。任何形式的帮助将不胜感激。
答案 0 :(得分:1)
任何时候你的逻辑变得错综复杂,这是一个红旗,你的数据库设计可能不适合鼻烟,应该考虑重构。不过,这个Fiddle显示的查询似乎有效。
编辑:您的描述并未明确是否应该排除“建筑美国”,因为它会长期陷入困境。如果是这样,请改为this fiddle。
答案 1 :(得分:0)
为了让你开始:做一个左连接:
SELECT <...>
FROM dbo.table1 t1
LEFT OUTER JOIN dbo.table2 t2
ON t1.ID1 = t2.ID2
然后您可以在一个case语句中访问两个表的所有列。如果table2中没有拟合行,则这些列将设置为NULL。
您可以在此处找到有关不同联接的详细信息:http://sqlity.net/en/1146/a-join-a-day-introduction/