我在Oracle(12c)中有一個表,我需要檢索數據。
該表稱爲ACCOUNT_ANALYSIS_FY16。該表格包含3級業務層次結構。該層級中的位置由DUNS_LEVEL列指定,其值爲DUNS(意味着業務的最低級別),IMMEDIATE(意味着級別2,也稱爲DUNS級別的父級)或ULTIMATE(意味着級別3或父級即時)。如何遍歷Oracle中的表SQL
Applicable columns are:
NN_NAME - Account Name
DUNS_LEVEL
DUNS
ULTIMATE_PARENT_DUNS
IMMEDIATE_PARENT_DUNS
要求......對於一個給定的帳戶名(也有可能是多次出現在同一帳戶名因不同的位置),我需要看到該帳戶的一切(又名SELECT *),AS以及給定賬戶的直接父母和終極父母的一切。
我已經在SQL中編寫了它,但它涉及5個SELECT語句。我知道必須有一個更優雅和簡單的方法來做到這一點。請注意,最終結果是將其放置在匿名PL/SQL塊中,因此如果這是更好的解決方案,編寫PL/SQL塊是可以接受的。
這裏是直接的SQL,我有哪些工作?
Select *from ACCOUNT_ANALYSIS_FY16 where NN_NAME = 'XYZ GROUP'
union
Select * from ACCOUNT_ANALYSIS_FY16 where DUNS in (Select IMMEDIATE_PARENT_DUNS from ACCOUNT_ANALYSIS_FY16 where NN_NAME = 'XYZ GROUP')
union
Select * from ACCOUNT_ANALYSIS_FY16 where DUNS in (Select ULTIMATE_PARENT_DUNS from ACCOUNT_ANALYSIS_FY16 where NN_NAME = 'XYZ GROUP')
感謝
你可以做到這一點作爲一個分層查詢不是真正確保結構的數據,所以你可能不得不玩弄它,但像從account_analysis_fy16 a 01選擇a。*,level,sys_connect_by_path(nm_name,'/')「路徑」以ultimate_parent_duns開頭爲空並且nm_name ='XYZ組' 由以前的連接immediate_parent_duns = ultimate_parent_duns或之前的duns = immediate_parent_duns; –
坦率地說,我喜歡原始的SQL。很明顯它在做什麼,它很容易閱讀。除非有性能問題,否則我認爲沒有理由改變它。 –