我需要帮助来管理一个查询才能成为功能。 需要传递一些内连接,然后在那之后比较一些值,并根据它来更新状态和正确的字母。
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)&lt;将取决于哪个字母。 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,status表t_entries可以包含多个记录,包含相同的carton_box和列accept和reject是int。我需要从t_entries获取carton_box的拒绝总和,并且从t_aql检查更大。如果表格中的carton_box更大,则t_carton_box将使用“R”更新状态,否则为“A”。我希望你能更清楚地了解它。
答案 0 :(得分:0)
它不起作用,因为您尝试使用多个值更新一个列。 即状态为一列,而*将为您提供多列。
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
答案 1 :(得分:0)
返回*的子选择永远不会使用相等的比较'='