我从数据库中获得了这两个数据,唯一的区别是它们的状态
id | userId | status | dateCreated
1 | 1 | pending | 2019-02-09 22:11:11
2 | 1 | complete | 2019-02-10 10:40:20
我想做的是,如果状态complete
根据ID存在,则获取状态为complete
的数据,否则,如果状态pending
不存在,则获取状态complete
我尝试使用SELECT CASE语句,但是发生的是它同时返回了待处理状态和完整状态
我之所以不只是更新第一个数据是出于报告目的。
有没有办法做到这一点? 这是我的示例查询。
SELECT userId,
CASE
WHEN status = 'completed' THEN "completed"
ELSE "pending"
END AS status
FROM tbltransaction where userId = '1'
答案 0 :(得分:0)
聚合返回每个用户一行:
SELECT userId,
(CASE WHEN SUM(status = 'completed') > 0 THEN 'completed'
ELSE 'pending'
END) AS status
FROM tbltransaction
WHERE userId = 1
GROUP BY userId;
或者,如果您只关心一个用户,则可以使用:
SELECT 1 as userId,
(CASE WHEN EXISTS (SELECT 1
FROM tbltransaction t
WHERE t.userId = 1 AND
t.status = 'completed'
)
THEN 'completed'
ELSE 'pending'
END)
答案 1 :(得分:0)
具有EXISTS:
SELECT userId,
CASE
WHEN EXISTS (SELECT 1 FROM tbltransaction WHERE userId = '1' AND status = 'completed') THEN 'completed'
ELSE 'pending'
END AS status
FROM tbltransaction where userId = '1'
答案 2 :(得分:0)
我可能是错的,但是从您的描述来看,您似乎想要给定userId的最新状态。我还假设this.validateForm.get('Name').patchValue(this.studentModel.Name);
是“自动增量”列。如果是这样,那么您可以尝试一下
id
在上述假设下,这将返回所有用户的最新状态。
希望这会有所帮助!干杯!