Access - 如果语句从其他表中选择值

时间:2015-06-11 14:31:36

标签: ms-access if-statement

我有三个表,每个表有10列和相同的行数。一个表("指示符"表)在每个单元格中具有1或2。另外两个表(我们称之为表1和表2)中包含数值数据。

我想要做的是创建一个包含10列且与其他表相同行数的新表。对于每个"单元格,"如果指标表的单元格为1,则从表1中拉出该单元格的数值,如果指标值为2,则从表格2中拉出。

这在Excel中很容易。如果我有三个带有10列和一些行数的选项卡,那么它将类似= if(指示器!B1 = 1,表1!B1,表2!B1),在整个范围内复制。但是,我需要在Access中执行此操作,出于某种原因,我无法绕过它,因为我是一个重要的Excel用户,不熟悉Access。

有什么想法吗?我确信有一种简单的方法可以做到这一点,我似乎无法弄明白。提前谢谢!

1 个答案:

答案 0 :(得分:1)

您需要加入这两个表,然后使用iif语句。 为了工作,您需要一个连接谓词来匹配相应的行。

所以你会以

结束
  • 表格指标(id,col1,..,col10)
  • 表格数据A(indicatorId,col1,..,col10)
  • 表格数据B(indicatorId,col1,..,col10)

现在您可以选择:

SELECT i.id,
    iif(i.col1=1, a.col1,b.col1) as col1,
    ...,
    iif(i.col10=1, a.col10,b.col10) as col10
FROM (Indicator AS i
INNER JOIN DataA AS a ON (i.id=a.indicatorId))
INNER JOIN DataB AS b ON (i.id=b.indicatorId))
ORDER BY i.id

请注意,此语法是特定于Access的,不会移植到其他SQL引擎,例如MSSQL需要WHEN ......然后...... ELSE ... END而不是iif。

另请注意,由于select-part中的条件,此类查询的性能会相当差。