2017-02-15 132 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爲不匹配的行。