我有一个场景,我正在使用 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
) 几乎没有重复项,相应的列 EmpName
为 Null
或具有一些值。我想消除所有重复的 AppID's
,其中 EmpName
为 null
。
如果唯一的 AppID
没有空值(请参阅最后一行),这可能是直截了当的,而且我不能硬编码,因为我正在处理大量数据。
另请注意,所有这三列都来自不同的表,并且已LEFT JOIN
到 AppID
表。如果您需要查看代码,请告诉我,我没有将其粘贴到此处,因为它有点复杂,但可能不需要。
感谢任何形式的帮助和建议。谢谢
最佳答案
在 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/