sql - T-SQL [UNION ALL] 从查询结果中删除记录

标签 sql sql-server tsql union union-all

有一个简单的 UNION ALL 查询,将两个查询的结果结合起来。第一个查询独立运行,返回 1208 条记录,第二个查询返回 14 条记录。我希望语法正确的 UNION ALL 返回 1222 条记录,但我的却下降到 896 条。

对我来说毫无意义:

SELECT a.WBS_ELEMENT_ID as [WBS Element],
a.WBS_ELEMENT_DESC as [WBS Element Desc],
a.UHC_INDUSTRY as [Industry],
a.UHC_SECTOR as [Sector],
a.UHC_DUNS_NUMBER as [UHC DUNS Number],
a.UHC_DUNS_NAME as [UHC DUNS Name],
a.PRIORITY_SUB_SECTOR as [Priority Sub Sector],
a.BUDGET_ALLOCATION as [Budget Allocation],
a.LAST_UPDATED_ON as [Last Updated]
FROM DimSectorPd a
WHERE a.wbs_element_id is not null

UNION ALL

SELECT ROW_NUMBER() OVER (ORDER BY a.wbs_element_desc) as [WBS Element],
a.WBS_ELEMENT_DESC as [WBS Element name],
a.UHC_INDUSTRY as [Industry],
a.UHC_SECTOR as [Sector],
a.UHC_DUNS_NUMBER  as [UHC DUNS Number],
a.UHC_DUNS_NAME as [UHC DUNS Name],
a.PRIORITY_SUB_SECTOR as [Priority Sub Sector],
a.BUDGET_ALLOCATION as [Budget Allocation],
a.LAST_UPDATED_ON as [Last Updated]
from dimsectorpd a where a.WBS_ELEMENT_ID is null

最佳答案

您的查询应返回表中的所有行。除非表在执行之间发生更改,否则单独运行子查询的结果应与使用 UNION ALL 运行子查询的结果相同。

请注意,如果您想简化查询,那么您可以这样做:

SELECT COALESCE(a.WBS_ELEMENT_ID,
                ROW_NUMBER() OVER (PARTITION BY wbs_element_id ORDER BY a. wbs_element_desc)
               ) as [WBS Element],
       a.WBS_ELEMENT_DESC as [WBS Element Desc],
       a.UHC_INDUSTRY as [Industry],
       a.UHC_SECTOR as [Sector],
       a.UHC_DUNS_NUMBER as [UHC DUNS Number],
       a.UHC_DUNS_NAME as [UHC DUNS Name],
       a.PRIORITY_SUB_SECTOR as [Priority Sub Sector],
       a.BUDGET_ALLOCATION as [Budget Allocation],
       a.LAST_UPDATED_ON as [Last Updated]
FROM DimSectorPd a;

关于sql - T-SQL [UNION ALL] 从查询结果中删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382491/

相关文章:

MySQL 从表中选择名称,比较来自相关表的属性

SQL Server 2008 计数

mysql - 客户交易总额

sql - 根据匹配的列从另一个表的列更新列

sql-server - SQL if语句在where子句中用于搜索数据库

MySQL WordPress 查询抛出错误和空数据

sql-server - 如何从 Windows 8 应用程序访问 SQL Server?

sql - 不带分组依据的 MAX 函数

sql - 需要对 UPDATE t-SQL 语句中的 SELECT 进行一些澄清

sql-server - 为什么我应该使用 Len(列名) 而不是列名 ='' (sql server 2008)