2017-02-15 129 views
1

enter image description here 我需要所有的数据在一条直线上。如何根据前面的select语句循环select语句?

我需要创建一个报告,为此我需要总结所有。 所以我首先选择了这个语句。 查询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

您的报告截屏显示没有数据。 –

+0

如果您发布样本数据和预期结果,这会更容易。没有必要使用'distinct by'来区分''。如果结合查询,哪些数据“重复”?假设每个字段都在'group by'子句中,它将为该行重新运行'distinct'数据。你需要更好地定义你的问题...... – sgeddes

回答

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为不匹配的行。