首页 > 解决方案 > SSRS 从每个合并的数据集中查找缺失的项目

问题描述

所以我有两个数据集。我使用 Lookup 函数SSRS将数据集合并到一个tablix. 但就我而言,我可能在任一数据集中都缺少项目。例如,我使用序列号作为我的唯一标识符。然而,数据集 1 可能有两个或三个序列号,它们不在数据集 2 中。这很容易,因为它Lookup只会产生NULL,所以它是可见的。但也有可能数据集 2 的序列号不在数据集 1 中。有没有办法在单个中显示这个,tablix或者我是否必须有两个报告,每个报告都有一个reversed lookup到其他数据放?MS SQL Server如果重要的话,这两个数据集都是使用来自不同数据库的查询创建的。

标签: sql-serverreporting-services

解决方案


我从未使用过报告服务,但从查询的角度来看,我会使用公用表表达式并执行以下操作。可能不是性能最好的解决方案,但它至少非常易读:)

CREATE TABLE #a (SerialNumber int primary key);
CREATE TABLE #b (SerialNumber int primary key);

INSERT INTO #a VALUES(1),(2),(3);
INSERT INTO #b VALUES(3),(4),(5);

WITH cte_all AS (
    SELECT * FROM #a
    UNION ALL
    SELECT * FROM #b
), cte_distinct AS (
    SELECT DISTINCT *
    FROM cte_all
)
SELECT 
    *,
    CASE 
        WHEN a.SerialNumber IS NOT NULL and b.SerialNumber IS NOT NULL 
            THEN 'Exists in both'
        WHEN a.SerialNumber IS NOT NULL and b.SerialNumber IS NULL
            THEN 'Only exists in A'
        WHEN a.SerialNumber IS NULL and b.SerialNumber IS NOT NULL
            THEN 'Only exists in B'
    END AS Comment
FROM
    cte_distinct c
    LEFT JOIN #a a ON a.SerialNumber = c.SerialNumber
    LEFT JOIN #b b ON b.SerialNumber = c.SerialNumber;

DROP TABLE #a;
DROP TABLE #b;

这将产生以下结果:

查询结果


推荐阅读