sql - 与 SQL Server 中的 CTE 合并
问题描述
我使用了这个merge
语句,但它没有更新我的目标表。它没有抛出任何错误,而是返回 cte, 的结果greater
。我希望它能够更新需要更新的行并插入需要插入的行并返回受影响的行数。
with greater (provider) as (
select
provider
from
(
select
h.provider,
npi
from
hha h
join Quality q on h.provider = q.provider
group by
h.provider,
npi
) a
group by
provider
having
count(*) > 1
),
zip_npi (providernbr, zip, npi) as (
select
providernbr,
zip,
npi
from
npi
group by
providernbr,
zip,
npi
),
zip_quality (provider, zip, rating) as (
select
provider,
zip,
rating
from
Quality
)
select
a.provider,
c.npi,
'HHA',
max(rating) as rating
from
greater a
join zip_quality q on a.provider = q.provider
join Zip_npi c on q.provider = c.providernbr
and q.zip = c.zip
where
rating <> ''
group by
a.provider,
c.npi merge provider as [Target] using greater as source on (
[Target].npi = [Source].npi
and [Target].provider = [Source].provider
) WHEN MATCHED THEN
UPDATE
SET
[Target].rating = [Source].rating WHEN NOT MATCHED THEN INSERT (provider, npi, type, rating)
VALUES
(
[Source].provider, [Source].npi,
'HHA', [Source].rating
);
解决方案
您的最后一个 SELECT(在 zip_quality 之后)也应该是 CTE 的一部分,所以是这样的:
... ),
zip_quality (provider, zip, rating) as (
select
provider,
zip,
rating
from
Quality
), something_else (provider ,npi, some_text ,rating ) as (
select
a.provider,
c.npi,
'HHA',
max(rating) as rating
from
greater a
join zip_quality q on a.provider = q.provider
join Zip_npi c on q.provider = c.providernbr
and q.zip = c.zip
where
rating <> ''
group by
a.provider,
c.npi
)
merge into provider as [Target]
using something_else as source
on (
[Target].npi = [Source].npi
and [Target].provider = [Source].provider
) WHEN MATCHED THEN
UPDATE
SET
[Target].rating = [Source].rating WHEN NOT MATCHED THEN INSERT (provider, npi, type, rating)
VALUES
(
[Source].provider, [Source].npi,
'HHA', [Source].rating
);
推荐阅读
- reactjs - 为什么我的 React Native 组件没有在状态更新时重新渲染?
- c# - 一个c#项目!我应该使用字符串数组吗?(这甚至是一件事吗?!)
- php - exec 无法在 windows 上执行命令
- c# - 如何在 LabVIEW 中运行 C# gRPC 实现 DLL
- c++ - 在 C++ 中使用集合时的标准比较器是什么
- python - 如何根据输入单词给出评分
- c# - Winform Designer 使用自定义控件生成名称错误
- oracle - ORA-00904 PL/SQL 中的标识符无效
- c# - Implementing Linear Regression in ASP.NET web application
- reactjs - 字符在 div 中显示的限制