MS Access中的SQL:从另一个字段

时间:2017-07-23 06:58:22

标签: sql ms-access

有两个表如下:

表1

code integer,
d1 single,
d2 single,
...
d6 single.

表2

code integer,
d string

表2中的字段d应包含“d1”,“d2”,...,“d5”或“d6”。 现在,我尝试使用code (integer)d_value (single)等字段撰写查询,其中d_value检索值d1d2,...或{{1} (来自表1)取决于表1中的字段d6值。现在使用d函数,它可以工作:

switch

然而,我觉得(并且相信)有更自然的方式而不是在SELECT Table1.code, Table2.d, Switch(Trim([d])="d1",[d1], Trim([d])="d2",[d2], Trim([d])="d3",[d3], Trim([d])="d4",[d4], Trim([d])="d5",[d5], Trim([d])="d6",[d6]) AS [d_value] FROM Table1 INNER JOIN Table2 ON Table1.[code] = Table2.[code]; 函数中写下d1,...,d6六个案例。

提前致谢

1 个答案:

答案 0 :(得分:2)

表格1的表格

code  d1   d2   d3   d4   d5   d6
----  ---  ---  ---  ---  ---  ---
   1  1.1  1.2  1.3  1.4  1.5  1.6
   2  2.1  2.2  2.3  2.4  2.5  2.6

Switch方法是使用静态SQL实现它的实用方法。但是,如果

  • 您发现在许多查询中使用Switch方法
  • 实际上有超过6个类别,或
  • 类别数量可能会发生变化

然后你应该重新组织Table1为

code  category  d_value
----  --------  -------
   1  d1            1.1
   1  d2            1.2
   1  d3            1.3
   1  d4            1.4
   1  d5            1.5
   1  d6            1.6
   2  d1            2.1
   2  d2            2.2
   2  d3            2.3
   2  d4            2.4
   2  d5            2.5
   2  d6            2.6

所以你可以简单地做

SELECT Table1.code, Table2.d, Table1.d_value
FROM Table1 INNER JOIN Table2 
    ON Table1.code = Table2.code AND Table1.category = Table2.d

重新制作原作"宽" Table1的形式你可以随时使用

TRANSFORM Min([d_value]) AS MinOfd_value
SELECT [code]
FROM Table1
GROUP BY [code]
PIVOT [category]