过滤 CTE 的结果以最终在 SQL 报告中结束

Filtering Results of a CTE to eventually end up in a SQL report

我正在使用 SSMS、SQL 服务器和 SSRS。我在 CTE 中得到了结果,我想进一步过滤 'after' 它是 运行。

查询在 table 中查找 ID 的多个条目。然后它选择具有空值的那些。这是一个正确的选择,我需要进一步缩小范围。

在这一点上,我过去会把它的输出转储到一个 excel 文件中,然后在 ID 字段中查找并突出显示重复值,并且只显示那些行。我的目标是将其纳入 SSRS 报告。

我是否只需要创建一个视图然后 运行 另一个针对它的 CTE 视图、某种类型的嵌套查询、存储过程并过滤出结果或使用用户定义的函数?我可以在第一个 CTE 之后使用逗号之类的东西,然后再做一个 WITH 语句吗?提前致谢。

WITH T AS
(
SELECT [ID] ,
    [LOCATION] ,
    [LOCATION_START_DATE],
    [LOCATION_END_DATE],
    [POS],
    COUNT(*) OVER (PARTITION BY [ID]) as Cnt
FROM LOCATIONS_TABLE WITH (NOLOCK)
)
SELECT  [ID] ,
    [LOCATION] ,
    [LOCATION_START_DATE],
    [LOCATION_END_DATE],
    [POS]
FROM T
WHERE Cnt >= 2
AND LOCATION_END_DATE IS NULL
ORDER BY ID

您可以按如下方式级联多个 CTE:

WITH 
    T AS (
        SELECT [ID] ,
            [LOCATION] ,
            [LOCATION_START_DATE],
            [LOCATION_END_DATE],
            [POS],
            COUNT(*) OVER (PARTITION BY [ID]) as Cnt
        FROM LOCATIONS_TABLE WITH (NOLOCK)
    ),
    U AS (
        SELECT  [ID] ,
            [LOCATION] ,
            [LOCATION_START_DATE],
            [LOCATION_END_DATE],
            [POS]
        FROM T
        WHERE Cnt >= 2
        AND LOCATION_END_DATE IS NULL
    )
SELECT ...

您可以创建本地 #temporary_table,将 CTE 结果插入此 #temporary_table 并筛选结果作为选择,根据需要将其保存到文件中。

这种方法的优点是 #temporary_tables 比嵌套查询和普通 tables 快得多。另一个优点是您可以创建其他查询,在 #temporary_table 中创建其他过滤器,这比嵌套 CTE 更简单,并且允许您在需要新过滤器时无需修改 CTE 即可生成其他报告。

您可以像创建普通 table 一样创建本地临时 table。

CREATE TABLE #temporary_table_name(
-- fields that match the results of the CTE
);

您可以像在普通 table 中一样将记录插入临时 table。

INSERT INTO #temporary_table_name.

缺点是每次创建它们的用户结束连接时,临时 table 都会与存储的数据一起删除。

希望对你有所帮助!