如果另一个字段等于特定内容,则加入字段

时间:2015-05-07 16:58:22

标签: sql ms-access join

我正在尝试将一个表中的多个字段连接到另一个表中的字段。它们将通过另一个字段中的值进行区分。我不确定这个加入应该如何运作,并希望得到建议。这里有表格的例子

Bldg|EMeter|GMeter|HMeter|CMeter
Bld1_1______1______1______1_____
Bld2_2______3______328____2_____
Bld2_NULL___4______NULL___NULL


Utility|Meter|TotCost|
E_______5_____20______
C_______5_____80______
H_______5_____123______
G_______5_____654______
E_______6_____999______
E_______7_____205______
G_______6_____200______
G_______7_____40______

这些表格显然只代表了我所处理的内容。但我尝试编写一个查询来匹配第二个表中第一个表到米列的所有米列,但前提是实用值与仪表中的第一个字母匹配(EMeter与E,GMeter相符)与G等一起使用。)此外,建筑物可以有一个以上的记录,因为它们可以有一个以上的类型。我试图为每个建筑物获得每个建筑物的成本,因此我为每个建筑物添加了所有单独的计量表(即.bldg2如何为G建造两个计量表,这些计量器将需要总成本要加在一起。我试图在我的查询中按建筑物运行一组,将所有这些组合在一起)。我尝试使用选择查询来加入第一个中的仪表,其中第二个中的仪表与实用程序匹配,但我无法获得如何执行此操作的语法或设计所有。最终我希望通过查询显示类似这样的内容

Bldg|ECost|GCost|HCost|CCost
Bld1_2000__39483_20____3829_
Bld2_2034__385___2839__3010_

1 个答案:

答案 0 :(得分:1)

由于第一个表中列的名称是固定的,因此您可以构建一个使用外部联接的查询,然后使用SELECT m.Bldg , SUM(e.TotCost) AS ECost , SUM(g.TotCost) AS GCost , SUM(h.TotCost) AS HCost , SUM(c.TotCost) AS CCost FROM tblBldgMeters m LEFT OUTER JOIN qryMtrHistory e ON e.Utility='E' AND m.EMeter=e.Meter LEFT OUTER JOIN qryMtrHistory g ON g.Utility='G' AND m.GMeter=g.Meter LEFT OUTER JOIN qryMtrHistory h ON h.Utility='H' AND m.HMeter=h.Meter LEFT OUTER JOIN qryMtrHistory c ON c.Utility='C' AND m.CMeter=c.Meter GROUP BY m.Bldg 进行分组,如下所示:

SELECT
    m.Bldg
,   SUM(e.TotCost * SWITCH(e.Utility='E', 1, true, 0)) AS ECost
,   SUM(g.TotCost * SWITCH(g.Utility='G', 1, true, 0)) AS GCost
,   SUM(h.TotCost * SWITCH(h.Utility='H', 1, true, 0)) AS HCost
,   SUM(c.TotCost * SWITCH(c.Utility='C', 1, true, 0)) AS CCost
FROM tblBldgMeters  m
LEFT OUTER JOIN qryMtrHistory e ON AND m.EMeter=e.Meter
LEFT OUTER JOIN qryMtrHistory g ON AND m.GMeter=g.Meter
LEFT OUTER JOIN qryMtrHistory h ON AND m.HMeter=h.Meter
LEFT OUTER JOIN qryMtrHistory c ON AND m.CMeter=c.Meter
GROUP BY m.Bldg
  

说不支持JOIN表达

这是MS-Access SQL引擎的问题。您可以将其重写为不同的查询:

JOIN

这会将条件从SWITCH移动到{{1}}。