You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL Server视图合并同一客户编码的行?

解决方案

错误原因

你收到的View or function 'Zrad_vw_CSR' contains a self-reference错误,是因为SQL Server不允许视图直接或间接引用自身,你的ALTER语句试图从要修改的视图本身查询,违反了这个规则。

正确实现方式

要实现同一custcode对应的CSR和Salesrep显示在同一行,无需依赖原有视图,直接基于原始表使用条件聚合即可完成。以下是修改后的视图创建/修改语句:

方式1:直接基于原始表生成目标视图

CREATE OR ALTER VIEW Zrad_vw_CSR
AS
SELECT 
    custcode,
    MAX(fromdate) AS "Recent",
    -- 提取对应custcode的Salesrep用户编码(usertype=1)
    MAX(CASE WHEN usertype = 1 THEN usercode END) AS Salesrep,
    -- 提取对应custcode的CSR用户编码(usertype=0)
    MAX(CASE WHEN usertype = 0 THEN usercode END) AS CSR
FROM [Original Table]
GROUP BY custcode;

方式2:保留中间分组逻辑(可选)

如果需要保留第一次视图中按usercode、custcode、usertype分组的逻辑,可以用子查询替代自引用:

CREATE OR ALTER VIEW Zrad_vw_CSR
AS
SELECT 
    custcode,
    MAX(Recent) AS "Recent",
    MAX(CASE WHEN usertype = 1 THEN usercode END) AS Salesrep,
    MAX(CASE WHEN usertype = 0 THEN usercode END) AS CSR
FROM (
    SELECT 
        usertype, 
        usercode, 
        custcode, 
        MAX(fromdate) AS "Recent"
    FROM [Original Table]
    GROUP BY usercode, custcode, usertype
) AS IntermediateData
GROUP BY custcode;

说明

  • 条件聚合通过MAX(CASE...),针对每个custcode分别提取对应类型的用户编码,将原本分行的数据合并到同一行。
  • MAX(fromdate)确保每个custcode保留最新的日期记录。
  • 原始表名若包含空格,需用方括号[Original Table]包裹,符合SQL Server语法要求。

内容的提问来源于stack exchange,提问作者zExcel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:02:09