如何根据条件向现有 SQL 服务器 table 添加列?
How to add column to an existing SQL Server table based on condition?
我想根据 table 中 3 列的条件向现有 table 添加一列,如下例所示。
我有 3 列:
- 已过期
- 待定
- on_the_go
其中每一列的值是另一个 table 对应值的 ID 号(过期值为 1)(待定值为 2)...
我想要的是添加一个名为 status
的列,将所有这 3 列合并为 1
我尝试使用 CASE WHEN
但没有按预期工作:
SELECT
EXPIRED, pending, on_the_go,
CASE EXPIRED
WHEN 1 THEN 1
END AS status_type,
CASE pending
WHEN 2 THEN 2
END AS status_type,
CASE on_the_go
WHEN 3 THEN 3
END AS status_type,
COUNT(*) AS number_of_exchange_activities
FROM
card
GROUP BY
EXPIRED, pending, on_the_go
EXPIRED
pending
on_the_go
status_type
status_type
status_type
number_of_exchange_activities
0
2
0
NULL
2
NULL
550
0
0
3
NULL
NULL
3
320
1
0
0
1
NULL
NULL
310
这是我期望得到的:
EXPIRED
pending
on_the_go
status_type
number_of_exchange_activities
0
2
0
2
550
0
0
3
3
320
1
0
0
1
310
您可以使用 case
的长格式,这样您就可以在每个 when
子句中放置完整的条件:
SELECT expired, pending, on_the_go,
CASE WHEN expired = 1 THEN 1
WHEN pending = 2 THEN 2
WHEN on_the_go = 3 THEN 3
END AS status_type,
COUNT(*) AS number_of_exchange_activities
FROM card
GROUP BY expired, pending, on_the_go
CASE
WHEN EXPIRED = 1 THEN 1
WHEN pending = 2 THEN 2
WHEN on_the_go = 3 THEN 3
ELSE 0
END As 'status_type'
我想根据 table 中 3 列的条件向现有 table 添加一列,如下例所示。
我有 3 列:
- 已过期
- 待定
- on_the_go
其中每一列的值是另一个 table 对应值的 ID 号(过期值为 1)(待定值为 2)...
我想要的是添加一个名为 status
的列,将所有这 3 列合并为 1
我尝试使用 CASE WHEN
但没有按预期工作:
SELECT
EXPIRED, pending, on_the_go,
CASE EXPIRED
WHEN 1 THEN 1
END AS status_type,
CASE pending
WHEN 2 THEN 2
END AS status_type,
CASE on_the_go
WHEN 3 THEN 3
END AS status_type,
COUNT(*) AS number_of_exchange_activities
FROM
card
GROUP BY
EXPIRED, pending, on_the_go
EXPIRED | pending | on_the_go | status_type | status_type | status_type | number_of_exchange_activities |
---|---|---|---|---|---|---|
0 | 2 | 0 | NULL | 2 | NULL | 550 |
0 | 0 | 3 | NULL | NULL | 3 | 320 |
1 | 0 | 0 | 1 | NULL | NULL | 310 |
这是我期望得到的:
EXPIRED | pending | on_the_go | status_type | number_of_exchange_activities |
---|---|---|---|---|
0 | 2 | 0 | 2 | 550 |
0 | 0 | 3 | 3 | 320 |
1 | 0 | 0 | 1 | 310 |
您可以使用 case
的长格式,这样您就可以在每个 when
子句中放置完整的条件:
SELECT expired, pending, on_the_go,
CASE WHEN expired = 1 THEN 1
WHEN pending = 2 THEN 2
WHEN on_the_go = 3 THEN 3
END AS status_type,
COUNT(*) AS number_of_exchange_activities
FROM card
GROUP BY expired, pending, on_the_go
CASE
WHEN EXPIRED = 1 THEN 1
WHEN pending = 2 THEN 2
WHEN on_the_go = 3 THEN 3
ELSE 0
END As 'status_type'