合并语句后 PIVOT 中 'ROWS' 关键字的指定

Designation of the 'ROWS' keyword in the PIVOT after Merge Statement

我在一个简单的语句之后立即有了这段代码。我对下面代码中的“1 行”关键字感到困惑。

有人可以解释一下我需要它做什么吗?

这段代码在合并语句之前。

CREATE TABLE #UpdatedRecords 
        (
            -- Create variable needed to count different merge operations
            mergeAction NVARCHAR(10)
        );

/==== 合并语句逻辑在这里.. ====/

OUTPUT  $action
        INTO #UpdatedRecords
        ;

        SET @RC = @@ROWCOUNT;

        SELECT   @insertMAddressTypeCount=[INSERT]
        ,        @updateMAddressTypeCount=[UPDATE]
        FROM    (
                SELECT  mergeAction,1 rows
                FROM    #UpdatedRecords
                ) p
        PIVOT
        (
            COUNT(rows)
        FOR    mergeAction IN 
        (    [INSERT], [UPDATE], [DELETE])
        ) AS pvt
        ;

查询的 1 rows 部分将具有常量值 1 的列添加到名为 p 的派生 table ("subquery")。该值用于通过 count(rows) 进行计数,尽管最终它是不必要的,因为 count(*) 给出了相同的结果。

这是一个不带 pivot 的等效查询,您可能会觉得它有用或有启发性:

select
    @inserts = count(case when mergeAction = 'INSERT' then 1 end),
    @updates = count(case when mergeAction = 'UPDATE' then 1 end)
from #UpdatedRecords;

编辑: 我忘记了 pivot 不支持 count(*) 操作并且 count(mergeAction) 也不起作用。这就是 OP 查询中出现虚拟列的原因。