我一直试图在SQL中执行一些操作,但在堆栈溢出问题上找不到正确的答案。我已经创建了一个表(名为RMBS_STANDARDIZED),它有一个列LOAN_PERC_ISSUER。该表是其他几个表的结合,在这些表中,我标准化了命名约定。
加载表之后,我要做的是用这个内部查询更新它(注意,当我运行这个查询时,它返回正确的值,但显然是作为一个列返回)。因此,我希望将返回的查询存储在表中。
SELECT
ISSUER_SERIES,
SUM(COALESCE(LOAN_BALANCE, 0)) AS TOTAL_BALANCE
FROM
RMBS_STANDARDIZED
GROUP BY
ISSUER_SERIES我试图使用的insert查询是
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。
或者,我已经尝试了以下几种方法
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和。
发布于 2022-02-17 08:18:45
您的第一个查询失败,因为LOAN_PERC_ISSUER有一个NULL约束。将查询重写为:
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用于计算列,但建议不要使用.
正确的方法是使用触发器。
https://stackoverflow.com/questions/71152888
复制相似问题