我有一个示例表:
+----+----+------+
|var1|var2|merged|
+----+----+------+
|a |b |a |
+----+----+------+
| |c |c |
+----+----+------+
| |x |x |
+----+----+------+
|c |d |c |
+----+----+------+
我想将var1
和var2
的值与var1
有值的规则合并,应该选择var2
。
我的下面的代码没有实现它,我对如何实现它感到茫然。
SELECT id, var1 & var2 AS merged
FROM myTable
所有这些代码都是连接var1
和var2
的数据,这不是我想要的。 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;
这里的结果是我想要的:
注意:
的列名ID
,var1
,var2
,switchResult
,NzResult
,IifResult
是指南
但是当我搜索(Blanks)
时,似乎有失败的行:
似乎var1
的值如果var2
缺少返回正确的查询,但var2
确实有值且var1
没有,则某些行不会返回正确的查询。
有谁知道为什么会这样?我已经检查过var1
和var2
是否包含空格而不是。
答案 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;