首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用CASE的UPDATE语句中使用CTE

在使用CASE的UPDATE语句中使用CTE
EN

Stack Overflow用户
提问于 2014-02-05 21:44:55
回答 2查看 1K关注 0票数 0

我有以下代码:

代码语言:javascript
运行
复制
WITH CTE_List AS
(
SELECT B.Chain_Code, B.State
FROM Company.dbo.Company_Master AS A
LEFT JOIN Company.dbo.StateChain_List AS B
ON A.State = B.State
AND A.Chain_Code = B.Chain_Code
)

UPDATE Company.dbo.Company_Master
SET MFN_Ind = (
    CASE
        WHEN (CTE_List.Chain_Code IS NULL) AND (CTE_List.State IS NULL) THEN 'N'
        ELSE 'Y'
    END
)
FROM CTE_List

CTE_List中的select语句返回如下值,但对应于Company_Master表中的每个记录:

代码语言:javascript
运行
复制
Chain_Code | State
00992      | IL
NULL       | NULL
NULL       | NULL
00732      | MA
NULL       | NULL

我的最终目标是基于这个MFN_Ind更新Company.dbo.Company_Master中的CTE_List列。如果填充了Chain_Code和State,那么MFN_Ind = 'Y‘。如果Chain_Code和State为NULL,则MFN_Ind = 'N‘。

正如现在设置的那样,查询更新MFN_Ind列,将所有设置为'Y‘的内容都更新了,因此很明显,大小写的第一部分没有捕获空字段。有什么我能解决的窍门吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-05 22:08:23

我觉得你让这件事变得比需要的复杂多了。

代码语言:javascript
运行
复制
UPDATE m
  SET m.MFN_Ind = CASE WHEN l.State IS NULL THEN 'N' ELSE 'Y' END
FROM Company.dbo.Company_Master AS m
LEFT OUTER JOIN Company.dbo.StateChain_List AS l
ON m.State = l.State
AND m.Chain_Code = l.Chain_Code;

或者最好将其拆分为2-将所有行更新为N,然后将匹配的行更新为Y

代码语言:javascript
运行
复制
UPDATE Company.dbo.Company_Master SET m.MFN_Ind = 'N';

UPDATE m SET m.MFN_Ind = 'Y'
FROM Company.dbo.Company_Master AS m
WHERE EXISTS (SELECT 1 FROM Company.dbo.StateChain_List AS l
WHERE m.State = l.State
AND m.Chain_Code = l.Chain_Code);
票数 2
EN

Stack Overflow用户

发布于 2014-02-05 22:01:35

代码语言:javascript
运行
复制
    WITH CTE_List AS
    (
    SELECT B.Chain_Code, B.State
    FROM Company.dbo.Company_Master AS A
    LEFT OUTER JOIN Company.dbo.StateChain_List AS B
    ON A.State = B.State
    AND A.Chain_Code = B.Chain_Code
    )

    ---UPDATE THE RECORD

    UPDATE m
    SET MFN_Ind = (
        CASE WHEN (CTE.Chain_Code IS NULL) AND (CTE.State IS NULL) THEN 'N'
            ELSE 'Y'
        END
    )
    FROM CTE_List cte 
  INNER JOIN  Company.dbo.Company_Master m 
    on m.State =cte.state
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21589188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档