sql-server - SQL Server 你可以更新通过多个 UNION ALL 创建的表中的元素吗
问题描述
我创建了一个由多个不同表组成的表。我正在尝试更新大型企业集团表中的特定元素,但无法 - 不断收到语法错误。有没有办法更新由多个表组成的表中的元素?
WITH sel AS
(
SELECT MIN(attribute_value) minyear,
MAX(attribute_value) maxyear
FROM ais.dms_attributes
WHERE attribute_name = 'Year'
AND ISNUMERIC(attribute_value) = 1
),
rec AS
(
SELECT CAST(minyear AS INT) minyear
FROM sel
UNION ALL
SELECT (CAST(minyear AS INT) +1) minyear
FROM rec
WHERE minyear <(SELECT maxyear FROM sel)
),
allrows AS
(
SELECT DISTINCT -1 ENTITY_ID,
attribute_value ENTITY_NAME,
CASE
WHEN attribute_name = 'tenant' THEN 'TENANT'
WHEN attribute_name = 'investment' THEN 'INVESTMENT'
WHEN attribute_name = 'asset' THEN 'ASSET'
ELSE attribute_name
END AS ENTITY_TYPE
FROM a.attributes
WHERE attribute_name IN ('tenant','investment','asset')
AND attribute_value IS NOT NULL
AND charindex('[',attribute_value) < 1
UNION ALL
SELECT CTYPE ENTITY_ID,
TYPE ENTITY_NAME,
'TYPE' ENTITY_TYPE
FROM a.types
UNION ALL
SELECT CGROUP ENTITY_ID,
GROUP ENTITY_NAME,
'GROUP' ENTITY_TYPE
FROM a.group
UPDATE a.group SET GROUP = 'Legacy' WHERE GROUP = 'Regular'
UNION ALL
SELECT -1,
CAST(minyear AS VARCHAR) ENTITY_NAME,
'YEAR' ENTITY_TYPE
FROM rec
)
SELECT *
FROM allrows
ORDER BY CASE
WHEN ENTITY_TYPE = 'YEAR' THEN ENTITY_NAME
END DESC,
CASE
WHEN ENTITY_TYPE <> 'YEAR' THEN ENTITY_NAME
END
解决方案
推荐阅读
- sql - HIVE SubQuery 表达式同时引用 Parent 和 SubQuery 表达式
- python - 将线性变换应用于 numpy 数组的每一列的最有效方法
- web-scraping - scrapy 给出的输出与网站上的不同,地理位置有问题吗?
- html - Font Awesome unicode "\f046" 未在 Chrome 中显示
- python-3.x - Python if 语句和赋值
- java - 将 char 数组转换为字符串。爪哇
- c - 加密小于 1Kbyte 的文件时出现段错误错误
- c# - 无法将“System.Int32”类型的对象转换为“System.Boolean”类型。
- java - 在 Cucumber 报告 (.html/.json) 文件中显示每个测试场景的时间戳(开始时间/结束时间)
- laravel - Laravel Chart 不呈现图表。未定义变量:图表