使用如下数据集-是否可以查询多个列以确定预定义值?
例如,查询数据将根据每个状态返回“ Complete”或“ Pending”状态eventId
,即,如果所有eventId
status =“ Approved”-事件的状态为“ Complete”。否则,事件的状态将为“待处理”。
eventId
=1
具有三个状态-草稿,草稿,已提交-状态=待处理。
eventId
=2
具有两个状态-已批准,已批准-状态=完成。
eventId
=3
具有一个状态-已提交-状态=待处理。
eventId
=4
具有两个状态-草稿,草稿-状态=待处理。
| activityId | eventId | status |
| ------------- | ------------- | ----- |
| 1 | 1 | Draft |
| 2 | 1 | Draft |
| 3 | 1 | Submitted |
| 4 | 2 | Approved |
| 5 | 2 | Approved |
| 6 | 3 | Submitted |
| 7 | 4 | Draft |
| 8 | 4 | Draft |
对于每个事件,您可以对状态为“已批准”的行进行计数,并将其与所有行的数量进行比较:
select
eventid,
string_agg(status, ', ') as statuses,
case when count(*) = count(case status when 'Approved' then 1 end)
then 'Complete'
else 'Pending' end as event_status
from my_table
group by 1
order by 1
eventid | statuses | event_status
---------+-------------------------+--------------
1 | Draft, Draft, Submitted | Pending
2 | Approved, Approved | Complete
3 | Submitted | Pending
4 | Draft, Draft | Pending
(4 rows)
当然,如果不需要,您可以删除第二列。
select
eventid,
string_agg(status, ', ') statuses,
case when bool_and(status = 'Approved')
then 'Complete'
else 'Pending' end as event_status
from my_table
group by 1
order by 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句