指定' ROWS'合并声明后PIVOT中的关键字

时间:2016-11-04 17:16:26

标签: merge sql-server-2008-r2 pivot

我在紧跟一个声明之后立即拥有此代码。我对 1行'混淆了以下代码中的关键字。

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

此代码位于merge语句之前。

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 个答案:

答案 0 :(得分:1)

查询的1 rows部分将一个具有常量值1的列添加到名为p的派生表(“子查询”)中。该值用于通过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查询中虚拟列的原因。