【问题标题】:Removing Null rows from a UNION Query从 UNION 查询中删除空行
【发布时间】:2021-10-31 08:06:51
【问题描述】:

如何从联合查询中删除空行并对结果进行 ASC 排序。下面的查询返回正确的未排序数据,但它也包含一个空行。 我如何完成这项任务?如果有人能就更有效的方法提出建议,我也将不胜感激。谢谢你。

SELECT TOP 1 'All rooms' AS [SELECTION:] FROM tbl1 UNION ALL 
(SELECT DISTINCT Room1 FROM tbl1 WHERE Room1 IS NOT NULL UNION ALL 
SELECT DISTINCT Room2 FROM tbl1 WHERE Room2 IS NOT NULL 
UNION ALL 
SELECT DISTINCT Room3 FROM tbl1 WHERE Room3 IS NOT NULL);

当前输出:

All rooms
Common Room
201
20
20.1
    'Null row here
256

预期:

All rooms
20
20.1
201
256
Common Room

【问题讨论】:

  • @TimWilliams 我刚刚标记了 MS Access。谢谢
  • 看起来你有零长度的字符串,这与 null 不同。要么更改您的表 def 以禁止零长度字符串,要么与 '' (空字符串)进行比较。

标签: sql vba ms-access


【解决方案1】:

尝试更改第二行 - 您选择的是 room1 where room2 is not null,也许您的意思是 where room1 is not nullwhere room2 is not null and room1 is not null

SELECT TOP 1 'All rooms' AS [SELECTION:] FROM tbl1 UNION ALL 
(SELECT DISTINCT Room1 FROM tbl1 WHERE Room1 IS NOT NULL UNION ALL 
SELECT DISTINCT Room2 FROM tbl1 WHERE Room2 IS NOT NULL 
UNION ALL 
SELECT DISTINCT Room3 FROM tbl1 WHERE Room3 IS NOT NULL);

【讨论】:

  • 肯尼已更正,问题相同。
【解决方案2】:

我已经设法通过使用Len 函数而不是IS NOT NULL 来解决这个问题。

SELECT TOP 1 'All rooms' AS [SELECTION:] FROM tbl1 
UNION ALL( SELECT DISTINCT Room1 As [SELECT LOCATION:] 
FROM tbl1 WHERE Len(Room1) >=1 
UNION SELECT DISTINCT Room2 FROM tbl1 
WHERE Len(Room2)>=1 
UNION SELECT DISTINCT Room3 
FROM tbl1 WHERE Len(Room3)>= 1
ORDER BY [SELECTION:]);

【讨论】:

    猜你喜欢
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多