SQL Server,跨多个表的case语句,vlookup

时间:2013-07-19 19:31:25

标签: sql sql-server case vlookup

我有一张表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中选取。

围绕这个问题构建逻辑有很多问题,我只是坚持一堆案例陈述。任何形式的帮助将不胜感激。

2 个答案:

答案 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/