sql-server - SQL Server - 如果列不存在,则创建列
问题描述
我有一个示例表(#temp),例如:
Account ABC DEF GHI
-----------------------------------
A001 1000.00 NULL NULL
A002 NULL 500.00 800.00
A003 NULL 700.00 NULL
A004 1100.00 NULL NULL
标题 ABC、DEF、GHI 是枢轴的结果。我想:
select
*,
case
when ABC is not NULL and JKL is not NULL
then 1
else 0
end as newColumn
from
#temp
这会出错,因为JKL
不存在。但是,它可以存在,并且必须在它存在时加以考虑。如何编辑我的查询语句以检查列 ABC 和 JKL 是否存在 > 如果它们不存在则 0 值 > 如果它们确实存在并且要么为空,则为 0 值 > 如果它们都不为空,则在 newColumn 中为 1 值.
解决方案
当您使用临时表时,这有点难看,但也许这样的事情会起作用:
IF NOT EXISTS (SELECT 1
FROM tempdb.sys.tables t
JOIN tempdb.sys.columns c ON t.object_id = c.object_id
WHERE t.name LIKE N'#temp[_]%'
AND c.[name] = N'JKL')
ALTER TABLE #Temp ADD JKL int;
DECLARE @SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) + NCHAR(13);
--Need dynamic SQL, as the batch will fail still otherwise
SET @SQL = N'SELECT *,' + @CRLF +
N'CASE WHEN ABC IS NOT NULL AND JKL IS NOT NULL THEN 1 ELSE 0 END AS newColumn' + @CRLF +
N'FROM #temp;'
EXEC sp_executesql @SQL;
如果JKL
应该有一个非NULL
值然后使用以下的ALTER
:
ALTER TABLE #Temp ADD JKL int DEFAULT 0 WITH VALUES;
推荐阅读
- birt - 在 BIRT 中使用 POJO 数据源嵌套表
- mysql - MYSQL 使用连续数值 IF NULL 更新列 - 继续序列
- loops - 弹性搜索循环两个索引的值
- java - 配置映射以连接字符串
- html - 为什么我的网页表单页面没有检测到 CSS 文件?
- sql-server - 如何在 MS SQL Server 中选择 1 周间隔后的 2018 年 7 月日期
- python - Python 中的均值过滤(手动)
- java - 识别 java POJO 类中更改的字段
- vba - 加入具有相同字段的各种表,但表名中的前缀发生变化
- r - 开发连续时间马尔可夫链模型来模拟 R 中鱼身上寄生虫的分布(计数)