首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将计算列插入表中

将计算列插入表中
EN

Stack Overflow用户
提问于 2022-02-17 05:22:39
回答 1查看 227关注 0票数 -1

我一直试图在SQL中执行一些操作,但在堆栈溢出问题上找不到正确的答案。我已经创建了一个表(名为RMBS_STANDARDIZED),它有一个列LOAN_PERC_ISSUER。该表是其他几个表的结合,在这些表中,我标准化了命名约定。

加载表之后,我要做的是用这个内部查询更新它(注意,当我运行这个查询时,它返回正确的值,但显然是作为一个列返回)。因此,我希望将返回的查询存储在表中。

代码语言:javascript
复制
SELECT 
    ISSUER_SERIES,
    SUM(COALESCE(LOAN_BALANCE, 0)) AS TOTAL_BALANCE 
FROM 
    RMBS_STANDARDIZED 
GROUP BY 
    ISSUER_SERIES

我试图使用的insert查询是

代码语言:javascript
复制
INSERT INTO RMBS_STANDARDIZED (LOAN_PERC_ISSUER)
    SELECT
        COALESCE(T1.LOAN_BALANCE, 0) / T2.TOTAL_BALANCE
    FROM 
        RMBS_STANDARDIZED T1
    LEFT JOIN
        (SELECT 
             ISSUER_SERIES,
             SUM(COALESCE(LOAN_BALANCE, 0)) AS TOTAL_BALANCE 
         FROM 
             RMBS_STANDARDIZED 
         GROUP BY 
             ISSUER_SERIES) T2 ON T1.ISSUER_SERIES = T2.ISSUER_SERIES 

但是我得到了以下错误

无法将值NULL插入列“颁发者”中

如果我调整ISSUER列以允许NULL,则该列不会更新或保持为NULL。

或者,我已经尝试了以下几种方法

代码语言:javascript
复制
ALTER TABLE RMBS_STANDARDIZED  
    ADD New_Column AS (SELECT
                           COALESCE(T1.LOAN_BALANCE, 0) /  T2.TOTAL_BALANCE
                       FROM 
                           RMBS_STANDARDIZED T1
                       LEFT JOIN
                           (SELECT 
                                ISSUER_SERIES,
                                SUM(COALESCE(LOAN_BALANCE, 0)) AS TOTAL_BALANCE 
                            FROM 
                                RMBS_STANDARDIZED GROUP BY ISSUER_SERIES) T2
                           ON T1.ISSUER_SERIES = T2.ISSUER_SERIES)

但是得到以下错误

在此上下文中不允许

子查询。只允许标量表达式。

任何想法都会有帮助。在创建最后一个表之前,我最好还是使用CTE或者创建一个temp/散列表?我正在使用Server和。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 08:18:45

您的第一个查询失败,因为LOAN_PERC_ISSUER有一个NULL约束。将查询重写为:

代码语言:javascript
复制
SELECT COALESCE(T1.LOAN_BALANCE / T2.TOTAL_BALANCE, 0)
FROM   RMBS_STANDARDIZED AS T1
       LEFT OUTER JOIN (SELECT ISSUER_SERIES, 
                               SUM(COALESCE(LOAN_BALANCE, 0)) AS TOTAL_BALANCE
                        FROM   RMBS_STANDARDIZED
                        GROUP  BY ISSUER_SERIES) AS T2 
           ON T1.ISSUER_SERIES = T2.ISSUER_SERIES;

计算列不能具有任何类型的子查询,必须只使用从行的值开始的数据。有可能将查询放入UDF并将UDF用于计算列,但建议不要使用.

正确的方法是使用触发器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71152888

复制
相关文章

相似问题

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