[英]How to retrieve data from table with conditions?
您可以通过测试每个grn-no
值的comment
是否存在状态为approved
或已rejected
行来执行此操作。 如果grn
既不被批准也不被拒绝,则状态被设置为pending
。
SELECT g.`grn-no`,
CASE WHEN EXISTS (SELECT * FROM comment c WHERE c.grn_id = g.id AND c.status = 'approved') THEN 'approved'
WHEN EXISTS (SELECT * FROM comment c WHERE c.grn_id = g.id AND c.status = 'rejected') THEN 'rejected'
ELSE 'pending' END AS status
FROM grn g
输出:
grn-no status
G1 rejected
G2 approved
G3 approved
G4 approved
G5 approved
您可以使用correlated subquery
select concat(grn_no,
' - ',
coalesce((select status
from comment
where status = 'approved'
and grn_id = g.id
group by grn_id),
'rejected')) "Result"
from grn g
您可以使用group_concat(flatten)
函数
Select
`grn-no`,
Case when status like ('%approved%') then 'approved' else 'rejected' end as status
From
(Select
`grn-no`,
group_concat(status) as status
From grn
left join comment
on grn.id = comment.grn_id
group by 1) a
最后,我发现了以上代码之后的所有功能。 上面的问题是在下面开发数据库视图。
CREATE OR REPLACE VIEW summery AS
SELECT
g.id,
g.supply_date,
g.grn_no,
COUNT(b.bag_no) AS bags,
CONCAT(s.fname," ", s.lname) AS name,
SUM(b.weight) AS qty,
AVG(b.bag_mc) AS mc,
(g.dust_initial/g.dust_weight)*100 AS dust,
(g.ubs_initial/g.ubs_weight)*100 AS ubs,
p.fraction_1 AS fraction_1,
CASE
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'approved') THEN 'Approved'
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'approved with concession') THEN 'Approved with Concession'
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'concession required') THEN 'Concession Required'
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'rejected') THEN 'Rejected'
ELSE 'pending' END AS status
FROM grns g
JOIN suppliers s ON s.id = g.supplier_id
JOIN psds p ON g.id = p.grn_id
JOIN bags b ON g.id = b.grn_id
GROUP BY g.id
ORDER BY g.id DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.