我需要创建一份报告,为此我需要总结一下。 所以我先做了这个选择声明。 的查询1
Select t1.scn,t1.vsl_name, t1.act_arr_dt_tm, t1.act_dept_dt_tm, t1.del_remarks
from vesvoy t1
所以根据上面的select语句,我需要让所有 t1.scn 循环下面的sql
QUERY2
Select t1.scn,t2.void_flg,
MAX(case when t2.inv_num like 'VI%' then t2.inv_num end) as Vessel,
MAX(case when t2.inv_num like 'VI%' then t2.inv_amt end) as Vessel_amt
from pbosinvoiceitem t1
inner join pbosinvoice t2 ON t2.id = t1.master_id
inner join pbosinvtype t4 ON t4.code = t2.inv_type
group by t1.scn,t2.void_flg
这样我就能在报告中得到结果。我试着创建临时表,但我得到的数据都是重复的。
我尝试组合两个查询,但结果显示重复结果
答案 0 :(得分:1)
我坐在这里思考:"第一个查询与第二个查询有什么关系?"两者都在同一张桌子上vesvoy
,所以问题是什么。第二个是处理与第一行相同的行。
我怀疑问题是join
正在丢失行。所以,我怀疑答案是使用left join
,而不是inner join
。一路上,摆脱select distinct
。这通常是个坏主意。在相同的非聚合列上与group by
结合使用时,它只显示缺乏对SQL的认识。
那么,这是否解决了您的顾虑?
SELECT t1.scn,
MAX(case when t3.inv_num like 'VI%' then t3.inv_num end) as Vessel,
MAX(case when t3.inv_num like 'VI%' then t3.inv_amt end) as Vessel_amt
FROM vesvoy t1 LEFT JOIN
pbosinvoiceitem t2
ON t2.scn = t1.scn LEFT JOIN
pbosinvoice t3
ON t3.id = t2.master_id
GROUP BY t1.scn;
对于不匹配的行,这将返回NULL
。