sql - 处理 SQL Server 中的 Null 值和重复记录

标签 sql sql-server reporting-services

我有一个场景,我正在使用 SQL Server Reporting Services 来创建一个表格报告,并卡在了一个点,我得到了一列的重复值。以下是代码的示例输出:

AppID   EmpID   EmpName
2002912 81555   NULL
2002912 81588   Jenn - 81588
2026880 9328    NULL
2026880 9628    Brad  - 09628
2027065 92174   Julie - 92174
2027065 92714   NULL
2028989 72138   NULL
2028989 91366   Alan - 91366
2029233 17438   NULL
2029233 53712   Brad - 53712
2031585 37902   NULL
2031588 17723   Richard - 17723
2031591 54551   Paula - 54551
2031593 52240   Sarah - 52240
2031597 72778   Daisy - 72778
2031603 12659   NULL

请注意第一个列 (AppID) 几乎没有重复项,相应的列 EmpNameNull 或具有一些值。我想消除所有重复的 AppID's,其中 EmpNamenull

如果唯一的 AppID 没有空值(请参阅最后一行),这可能是直截了当的,而且我不能硬编码,因为我正在处理大量数据。

另请注意,所有这三列都来自不同的表,并且已LEFT JOINAppID 表。如果您需要查看代码,请告诉我,我没有将其粘贴到此处,因为它有点复杂,但可能不需要。

感谢任何形式的帮助和建议。谢谢

最佳答案

在 CTE 中使用 ROW_NUMBER 函数,然后选择第一行。尽管如果有多个 EmpName 不是 NULL,您将只会按字母顺序获得第一个。

WITH AppAndEmp AS
(
    SELECT
        AppID
        , EmpID
        , EmpName
        , ROW_NUMBER() OVER(PARTITION BY AppId
                       ORDER BY (CASE WHEN EmpName IS NULL THEN 0 ELSE 1 END) DESC
                                , EmpName) AS EmpOrder

    FROM
        dbo.App
        LEFT JOIN dbo.Emp
            ON  App.AppId = Emp.AppId
)

SELECT
    *

FROM
    AppAndEmp

WHERE
    EmpOrder = 1

关于sql - 处理 SQL Server 中的 Null 值和重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26145757/

相关文章:

mysql - 比较 MySQL 中的两个 ISO 日期时间字符串

sql - 排除 NULL 的 JOIN 字段上的匹配

reporting-services - 如何使用 DataSet 值填充 SSRS 文本框?

mysql - 以准确的 MAX 顺序在特定时间戳之间获取具有 MAX 值的记录

sql - View 的顺序是否有保证?

c# - SQLBulkCopy 抛出 InvalidOperationException 可空整数

Python pymssql 尝试启动新的 Adaptive Server 操作,结果待处理

sql - SQL Server 列的瀑布逻辑

reporting-services - SSRS - RDLC Tablix 行不会跨页面拆分

sql-server - 如何在移动报表发布器中创建 SQL Server 连接