(SSMS) SQL:使用 CASE 在同一列中获取一个人的 "Age"(作为数字)(如果活着)和 "RIP"(作为文本)(如果死亡)
(SSMS) SQL: use CASE to get a person's "Age" (as number) if alive and "RIP" (as text) if dead in the same column
[已解决]
如果此问题重复,我们深表歉意。现在花了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 的 column(使用 varchar),它显示状态 ALIVE 或DECEASED table 中的每个人。如果此人还活着,his/hers 年龄(一个数字)应该显示在 年龄列 中(使用 varchar)。但是,如果此人已死,则应改为显示 R.I.P(文本)。年龄基于人的出生年份,为此我有一个单独的 列 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 的错误,说无效列。但是它们都存在于我的 table 中。我也试过扭转这个:
insert into My_Family_Tree (Age)
VALUES(
CASE
WHEN 'Vital status' = 'Alive' THEN CONVERT(varchar(30), DATEDIFF(year, 'Birthday', 2020))
ELSE 'RIP'
END)
首先,我想你想要一个 update
。其次,您没有 date 的出生日期。你只有一年。
所以,我想你想要:
update My_Family_Tree
set Age = (CASE WHEN [Vital status] = 'Deceased'
THEN 'R.I.P'
ELSE CONVERT(varchar(30), 2021 - Born)
END)
[已解决]
如果此问题重复,我们深表歉意。现在花了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 的 column(使用 varchar),它显示状态 ALIVE 或DECEASED table 中的每个人。如果此人还活着,his/hers 年龄(一个数字)应该显示在 年龄列 中(使用 varchar)。但是,如果此人已死,则应改为显示 R.I.P(文本)。年龄基于人的出生年份,为此我有一个单独的 列 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 的错误,说无效列。但是它们都存在于我的 table 中。我也试过扭转这个:
insert into My_Family_Tree (Age)
VALUES(
CASE
WHEN 'Vital status' = 'Alive' THEN CONVERT(varchar(30), DATEDIFF(year, 'Birthday', 2020))
ELSE 'RIP'
END)
首先,我想你想要一个 update
。其次,您没有 date 的出生日期。你只有一年。
所以,我想你想要:
update My_Family_Tree
set Age = (CASE WHEN [Vital status] = 'Deceased'
THEN 'R.I.P'
ELSE CONVERT(varchar(30), 2021 - Born)
END)