将来自n字段的值与优先级相结合

时间:2014-01-15 00:39:15

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

我有一个示例表:

+----+----+------+
|var1|var2|merged|
+----+----+------+
|a   |b   |a     |
+----+----+------+
|    |c   |c     |
+----+----+------+
|    |x   |x     |
+----+----+------+
|c   |d   |c     |
+----+----+------+

我想将var1var2的值与var1有值的规则合并,应该选择var2


我的下面的代码没有实现它,我对如何实现它感到茫然。

SELECT id, var1 & var2 AS merged
FROM myTable

所有这些代码都是连接var1var2的数据,这不是我想要的。 one I asked before已无法正常工作。

+----+----+------+
|var1|var2|merged|
+----+----+------+
|a   |b   |ab    |
+----+----+------+
|    |c   |c     |
+----+----+------+
|    |x   |x     |
+----+----+------+
|c   |d   |cd    |
+----+----+------+

this问题下面的问题未考虑单独的值:(


SELECT ID, var1, var2, 
  SWITCH (        
    var1 IS NOT NULL, var1,     
    var2 IS NOT NULL, var2,   
  ) AS merged
FROM myTable;
+----+----+------+
|var1|var2|merged|
+----+----+------+
|a   |b   |a     |
+----+----+------+
|    |c   |      |
+----+----+------+
|    |x   |      |
+----+----+------+
|c   |d   |c     |
+----+----+------+

更新

使用答案中提供的方法后,我看到我的记录中的一些实现了我在上面第一个表中所呈现的内容。但在查看其他行后,我设法找到了跳过的行,如第三个表中所示。

以下是我使用的代码和结果的截图。

SELECT ID, var1, var2, 

      # method 1
      SWITCH (        
        var1 IS NOT NULL, var1,     
        var2 IS NOT NULL, var2
      ) AS switchResult,

      # method 2
      Nz(var1, var2) AS NzResult,

      # method 3
      Iif(var1 IS NULL, var2, var1) AS IifResult

FROM myTable;

这里的结果是我想要的:

  

注意:IDvar1var2switchResultNzResultIifResult   是指南

的列名

enter image description here

但是当我搜索(Blanks)时,似乎有失败的行:

enter image description here

似乎var1的值如果var2缺少返回正确的查询,但var2确实有值且var1没有,则某些行不会返回正确的查询。

有谁知道为什么会这样?我已经检查过var1var2是否包含空格而不是。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT var1, var2, COALESCE(var1, var2) AS merged
  FROM myTable;

答案 1 :(得分:1)

如果不是空,则需要var1,否则您需要var2。您可以使用Nz来获取该内容。

SELECT var1, var2, Nz(var1, var2) AS  merged
FROM myTable;

如果您将从Access会话外部运行查询,则Nz功能将不可用。在这种情况下,您可以使用IIf表达式。

SELECT var1, var2, IIf(var1 Is Null, var2, var1) AS  merged
FROM myTable;

如果var1可能包含零长度字符串(""),并且您希望那些处理方式与Null相同 - 意味着在该情况下返回var2 - 请使用此查询...

SELECT var1, var2, IIf(Len(var1 & "") = 0, var2, var1) AS  merged
FROM myTable;