0

我有一个表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,并检查 ID1 是否存在于表 2 中,如果不存在则选择表 1 中的余额。如果它存在于表 2 中并发现注释为 1,则它仍然选择从表1中向上余额,如果发现表2中的note大于1,则检查ID1是否有多个ID2,如果确实有多个ID2,则检查是否有其他ID1不相同,并且然后将表 2 中的余额和表 1 中找到的另一个 ID 相加。因此对于 ID1 =10233,代码转到表 2,发现 note 为 2。10233 对应的 ID2 为 22。然后检查是否有ID1 在那里包含相同的 ID2。ID2相同的两个ID1分别是10232和10233。然后将表2中10233的Balance相加,再将表1中10232的Balance相加。

对于 ID 10234,它是 2300,因为它发现 note 是 1 并且仅从表 1 中提取。

在围绕此构建逻辑时遇到了很多问题,并且只被一堆案例陈述所困扰。任何形式的帮助将不胜感激。

4

2 回答 2

1

每当您的逻辑变得如此复杂时,这就是一个危险信号,表明您的数据库设计可能无法满足要求,因此应该考虑重构。尽管如此,这个Fiddle显示了一个似乎有效的查询。

编辑:您的描述没有明确说明“建设美国”是否应该被排除在外,因为它与长期混为一谈。如果是这样,请查看此小提琴

于 2013-07-19T20:17:05.980 回答
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/

于 2013-07-20T08:08:16.537 回答