如何根据前面的select语句循环select语句?

时间:2017-02-15 01:29:57

标签: sql loops

enter image description here 我需要所有数据都在一条直线上。

我需要创建一份报告,为此我需要总结一下。 所以我先做了这个选择声明。 的查询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

这样我就能在报告中得到结果。我试着创建临时表,但我得到的数据都是重复的。

我尝试组合两个查询,但结果显示重复结果

1 个答案:

答案 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