可选的Access列值选择

时间:2013-11-24 08:58:43

标签: sql database ms-access ms-access-2007 access-vba

我有一个如下所示的Access表:

A | B | C | Final
1 |   |   | 1
2 | 3 |   | 
4 | 4 |   | 4
5 | 5 | 5 | 5
  | 4 | 1 | 
9 | 2 | 4 | 

以下带星号的值是目标。我需要一个脚本,可以在 n - 列之间进行选择,以识别优先级规则,在这种情况下,如果值重复,则为A > B > C

A | B | C | Final
1 |   |   | 1
2 | 3 |   | *2
4 | 4 |   | 4
5 | 5 | 5 | 5
  | 4 | 1 | *4
9 | 2 | 4 | *9

到目前为止,我已经实现了this主题中的其他情况,即情况2,但我有65000多个项目,其中手动选择值会花费一些时间。我希望有一个可以在Access中执行此操作的自动脚本。

到目前为止,我无法实现此伪代码:

SELECT ID, A, B, C FROM table

// loop per row
if ( countUniqueValues(A, B, C) >= 2 ) 
then
   if ( hasValue(A) )
       then Final = A.value
   else if ( hasValue(B) )
       then Final = B.value
   else Final = C.value

因为我正在研究的那个仍然存在缺陷:

SELECT ID, N1 &
  // I want to compare each value with NOT NULL and pick based on the pseudocode
  IIf(N1 NOT NULL) AS Final OR
  IIf(N2 NOT NULL) AS Final OR
  IIf(N3 NOT NULL) AS Final
FROM
  (SELECT ID, Nz(A) AS N1, Nz(B) AS N2, Nz(C) AS N3
   FROM table) AS T
ORDER BY ID;

1 个答案:

答案 0 :(得分:1)

您可以使用SWITCH功能:

SELECT  A,
        B,
        C,
        SWITCH
        (   A IS NOT NULL, A,
            B IS NOT NULL, B,
            C IS NOT NULL, C
        ) AS Final
FROM    T;