合并语句后 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 查询中出现虚拟列的原因。
我在一个简单的语句之后立即有了这段代码。我对下面代码中的“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 查询中出现虚拟列的原因。