i need create new column following respected:
if all
order_id
within oneid
haveapproved
flag of 1 ,denied
flag of 0, flag approved. (example :id 1
)if all
order_id
within oneid
haveapproved
flag of 0 ,denied
flag of 1, flag denied. (example :id 2
)if some
order_id
within oneid
haveapproved
flag of 1 ,denied
flag of 0 , others eitherapproved
flag of 0 ,denied
flag of 1 orapproved
flag of 0 ,denied
flag of 0, flag partially approved. (example :id 3
,6
)- if any
order_id
within oneid
haveapproved
flag of 1 ,denied
flag of 1 regardless of otherorder_id
withinid
, flag error. (example :id 4
) - if all
order_id
within oneid
haveapproved
flag of 0 ,denied
flag of 0, flag pending approval. (example :id 5
)
this simplified table using example:
**id order_id approved denied 1 101 1 0 2 201 0 1 2 202 0 1 1 102 1 0 4 401 0 1 3 301 0 1 6 601 0 1 1 103 1 0 3 302 1 0 3 303 0 0 5 501 0 0 4 402 1 0 6 602 1 0 5 502 0 0 4 403 1 1 5 503 0 0
and result expect :
**id order_id approved denied approval_status 1 101 1 0 approved 2 201 0 1 denied 2 202 0 1 denied 1 102 1 0 approved 4 401 0 1 error 3 301 0 1 partially approved 6 601 0 1 partially approved 1 103 1 0 approved 3 302 1 0 partially approved 3 303 0 0 partially approved 5 501 0 0 pending approval 4 402 1 0 error 6 602 1 0 partially approved 5 502 0 0 pending approval 4 403 1 1 error 5 503 0 0 pending approval
thank in advance !! confused of how loop within 1 id
in case statement.
i take comment above.
with cte ( select count(*) numberoforder , sum(approved) numberofapproved , sum(denied) numberofdenied , sum(iif(approved=1 , denied=1,1,0)) numberoferror , id testtable t1 group t1.id ) select t2.* , case when cte.numberoferror > 0 'error' when cte.numberofapproved=cte.numberoforder 'approved' when cte.numberofdenied=cte.numberoforder 'denied' when cte.numberofapproved>0 or cte.numberofdenied > 0 'partially approved' else 'pending approval' end approval_status testtable t2 join cte on t2.id=cte.id
Comments
Post a Comment