sql - (SSMS) SQL:如果在同一列中,则使用 CASE 获取一个人的“年龄”(作为数字)和“RIP”(作为文本)如果死在同一列中
问题描述
[已解决] https://stackoverflow.com/a/66287009/7657958
抱歉,如果这个问题是重复的。现在花了3小时尝试各种方法来解决我的问题,但无济于事!任何帮助表示赞赏!
PROGRAM: Microsoft SQL Server Management Studio
EXPERIENCE: 2-3 weeks (Beginner)
PROGRAM VERSION:
SQL Server Management Studio 15.0.18369.0
SQL Server Management Objects (SMO) 16.100.46041.41
Microsoft Analysis Services Client Tools 15.0.19342.0
Microsoft Data Access Components (MDAC) 10.0.18362.1
Microsoft MSXML 3.0 6.0
Microsoft .NET Framework 4.0.30319.42000
Operating System 10.0.18363
我正在尝试根据一个人的生命状况自动填充年龄列。为此,我有一个名为Vital status的列(使用 varchar),它显示表中每个人的状态ALIVE或DECEASED。如果此人还活着,他/她的年龄(一个数字)应该显示在Age 列中(使用 varchar)。但是,如果此人已死,则应改为显示 RIP(文本)。年龄基于人的出生年份,为此我有一个单独的列 Born(使用 int)显示年份。
Example: the result should look like this.
--------------------------------------------------
ID | Name | Born | Vital status | Age |
--------------------------------------------------
1 | Arnold | 1992 | Alive | 29 |
2 | Bruce | 1952 | Deceased | R.I.P |
3 | Arnie | 1972 | Deceased | R.I.P |
4 | Bruno | 1962 | Deceased | 58 |
这是我最近的尝试:
insert into My_Family_Tree (Age)
VALUES(
CASE
WHEN [Vital status] = 'Deceased' THEN 'R.I.P'
ELSE CONVERT(varchar(30), DATEDIFF(year, Born, 2021))
END)
这给了我关于 [Vital status] 和 Born 的错误,说无效的列。但是它们都存在于我的表中。我也试过扭转这个:
insert into My_Family_Tree (Age)
VALUES(
CASE
WHEN 'Vital status' = 'Alive' THEN CONVERT(varchar(30), DATEDIFF(year, 'Birthday', 2020))
ELSE 'RIP'
END)
解决方案
首先,我认为你想要一个update
. 其次,你没有出生日期。你只有一年。
所以,我想你想要:
update My_Family_Tree
set Age = (CASE WHEN [Vital status] = 'Deceased'
THEN 'R.I.P'
ELSE CONVERT(varchar(30), 2021 - Born)
END)
推荐阅读
- bixby - 你能刷新一个输入视图吗?
- r - ggsurvplot 警告“警告消息:1:删除了 1 行包含缺失值 (geom_text)”
- python - 将一个数据帧中的值更改为另一个数据帧中的值作为查找表
- python - wxNotebook 事件仅在最后一次绑定时起作用
- php - 发布时获取未选中表单的值
- python - Python数据类型类型代码综合表或资源
- sql - 如何在 Oracle SQL 中在冒号之后和空格之前返回子字符串
- java - 动态代码评估:不安全的反序列化强化问题
- c# - context.GetInput
返回基类而不是 $Type 中指定的派生类 - r - pptx 字幕中的第二行文字