我有三个表,每个表有10列和相同的行数。一个表("指示符"表)在每个单元格中具有1或2。另外两个表(我们称之为表1和表2)中包含数值数据。
我想要做的是创建一个包含10列且与其他表相同行数的新表。对于每个"单元格,"如果指标表的单元格为1,则从表1中拉出该单元格的数值,如果指标值为2,则从表格2中拉出。
这在Excel中很容易。如果我有三个带有10列和一些行数的选项卡,那么它将类似= if(指示器!B1 = 1,表1!B1,表2!B1),在整个范围内复制。但是,我需要在Access中执行此操作,出于某种原因,我无法绕过它,因为我是一个重要的Excel用户,不熟悉Access。
有什么想法吗?我确信有一种简单的方法可以做到这一点,我似乎无法弄明白。提前谢谢!
答案 0 :(得分:1)
您需要加入这两个表,然后使用iif语句。 为了工作,您需要一个连接谓词来匹配相应的行。
所以你会以
结束现在您可以选择:
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中的条件,此类查询的性能会相当差。