하나의 쿼리를 기능으로 관리하려면 도움이 필요합니다. 몇 가지 내부 조인을 전달하고 그 후에 일부 값을 비교하고이를 기반으로 올바른 문자로 상태를 업데이트해야합니다.
update t_carton_box
set status = (select *
from t_entries e
inner join t_aql a
on e.aql_id = a.aql_id
inner join t_aql_ver av
on av.id=a.aql_ver_id
inner join t_carton_box c
on e.carton_box = c.carton_box
inner join t_entries ee
on case
when sum(ee.reject) < a.reject
then 'A'
else 'R' end )
위의 코드로 시도했지만 작동하지 않습니다.
잘못된 설명으로 죄송합니다. 열이있는 t_carton_box 테이블이 있는데 그중 하나가 상태입니다. 모든 기록의 상태는 문자 'A'또는 'R'로 업데이트해야합니다. sum (t_entries.rejecte) <t_aql.reject 인 경우 어떤 문자가 될지 다릅니다. 또한 다른 내부 조인이 포함되어야합니다. 해당 조건이 올바른 값 t_aql.reject를 제공하기 때문입니다.
최신 정보:
t_entries에는 entry_id, accept, reject, carton_box, fk_aql_id 열이 있습니다. t_aql에는 aql_id, accept, reject, fk_aql_ver_id 열이 있습니다. t_aql_ver에는 열 ID가 있습니다. t_carton 상자에는 carton_box_id, carton_box, 상태 열이 있습니다. 거부는 정수입니다. carton_box에 대한 t_entries에서 거부 합계를 가져와야하고 t_aql에서 확인이 더 큽니다. 테이블 t_carton_box의 해당 carton_box에 대해 더 큰 경우 'R'이 아니면 'A'로 상태가 업데이트됩니다. 나는 당신에게 더 명확하게 알기를 바랍니다.
여러 값으로 하나의 열을 업데이트하려고하기 때문에 작동하지 않습니다. 즉 상태는 하나의 열이고 *는 여러 열을 제공합니다.
set status = (select *
OP의 편집에 따라 SQL은 다음과 같습니다.
UPDATE TCB
SET TCB.STATUS = TE_SUM_O.STATUS
FROM T_CARTON_BOX TCB
INNER JOIN (
SELECT TE_SUM.CARTON_BOX,(CASE WHEN TE_SUM.REJECT=TE_SUM.TE_REJECT THEN 'R' ELSE 'A' END)STATUS
FROM(
SELECT TE.CARTON_BOX,TA.REJECT,SUM(TE.REJECT)TE_REJECT
FROM T_AQL TA
INNER JOIN T_ENTRIES TE
ON TA.AQL_ID = TE.FK_AQL_ID
GROUP BY TE.CARTON_BOX,TA.REJECT)TE_SUM
)TE_SUM_O
ON TCB.CARTON_BOX=TE_SUM_O.CARTON_BOX
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다