【问题标题】:Access Select - Combine table1 with summed values of table2访问选择 - 将 table1 与 table2 的总和值组合
【发布时间】:2016-04-17 21:00:34
【问题描述】:

我在 Access 2010 中有两个表:

表 1:

Key|ValTab1
  1|    100
  2|    200
  3|    300

Tab2:

Key|ValTab2
  1|   1000
  1|   7000
  3|   3000
  4|   4000

期望的结果:

Key|    Val
  1|   8100
  2|    200
  3|   3300

是否可以在不将所有内容选择到一个表中然后将所有内容分组(在 Microsoft Access 中)的情况下执行此操作?类似的东西

SELECT Tab1.Key,Sum(Tab1.ValTab1+IIF(Tab2.ValTab2 Is Null,0,Tab2.ValTab2)) AS Val
FROM Tab1 LEFT JOIN Tab2 
ON Tab1.Key = Tab2.Key
GROUP BY Tab1.Key;

但这会导致 Key 1/Val 8200

问题 #2:

将 Tab1 扩展到

Cat|Key|ValTab1
  1|  1|    100
  1|  2|    200
  1|  3|    300
  2|  4|     20
  3|  5|      1

是否可以使用 Tab1.Key=Tab2.Key 从 Cat 建立连接以获取 Sum(ValTab1+ValTab2)?

将 FuzzyTree 的解决方案 max(tab1.val) + sum(tab2.val) 应用于问题 #1:

这意味着类似

SELECT Tab1.Cat, Max(Tab1.ValTab1) + Sum(IIF(Tab2.ValTab2 Is Null,0,Tab2.ValTab2)) AS Val
FROM Tab1 LEFT JOIN Tab2 
ON Tab1.Key = Tab2.Key
GROUP BY Tab1.Cat;

得到想要的结果:

Cat|  Val
  1|11600
  2| 4020
  3|    1

提前致谢!

【问题讨论】:

    标签: sql ms-access select


    【解决方案1】:

    我认为在这种情况下关联子查询可能是最简单的:

    select tabl1.*,
           (tab1.valtab1 +
            (select sum(valtab2)
             from tab2
             where tab2.key = tab1.key
            )
           ) as val
    from tab1;
    

    您可能需要使用nz():

    select tabl1.*,
           (tab1.valtab1 +
            nz((select sum(valtab2)
                from tab2
                where tab2.key = tab1.key
               ), 0)
           ) as val
    from tab1;
    

    【讨论】:

      【解决方案2】:

      如果tab1 中的键是唯一的,那么您应该只添加一次它们的值,您可以使用sum(tab1.val) + sum(tab2.val) 执行此操作

      SELECT Tab1.Key, Sum(Tab1.ValTab1) + Sum(Tab2.ValTab2) AS Val
      FROM Tab1 LEFT JOIN Tab2 
      ON Tab1.Key = Tab2.Key
      GROUP BY Tab1.Key;
      

      【讨论】:

      • 那行得通。是否可以按另一列分组?假设您将带有值categ1 的列Key 2 添加到Tab1(每个条目)并像SELECT Tab1.Key2, Max(Tab1.ValTab1) + Sum(IIF(Tab2.ValTab2 Is Null,0,Tab2.ValTab2)) AS Val FROM Tab1 LEFT JOIN Tab2 ON Tab1.Key = Tab2.Key GROUP BY Tab1.Key2 那样做吗?结果categ1|11600。其实max这里不能用。
      • @dan 我不明白这个问题。如果您打开一个单独的问题可能会更清楚
      • 这导致Cat=1, Val=11700,因为Cat=1,Key=1,ValTab1=100 被计算了两次。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 2017-08-05
      • 1970-01-01
      相关资源
      最近更新 更多