2017-08-02 60 views
0

好的,所以這個問題可能看起來有點不可思議,但如果有人知道是否有可能,這對開發我正在編寫的查詢會有很大的幫助。嵌入式選擇參考其父表的表格

這裏是什麼我目前的查詢做一些僞代碼:

SELECT TERMS.Field1 
    , TERMS.Field2 
    , DISC.Field3 
    FROM 
    (
     SELECT Field1 
      ,Field2 
     FROM 
     --various tables 
     WHERE 
     --various expressions 
    ) TERMS, 
    (
     SELECT Field3 
     FROM 
     --various tables 
     WHERE 
     --various expressions 
    ) DISC 
    WHERE 
    --various expressions 

我想是能夠嵌入選擇添加到最頂層的select語句即能指的是什麼從條款被退回,有點像這樣:

SELECT TERMS.Field1 
    , TERMS.Field2 
    , DISC.Field3 
    , (
     SELECT Count(*) 
     FROM TERMS 
     WHERE 
     --various conditions 
    ) 
    FROM 
    (
     SELECT Field1 
      ,Field2 
     FROM 
     --various tables 
     WHERE 
     --various expressions 
    ) TERMS, 
    (
     SELECT Field3 
     FROM 
     --various tables 
     WHERE 
     --various expressions 
    ) DISC 
    WHERE 
    --various expressions 

你可能會問爲什麼我不只是把直接條款一count(*),這是因爲有我想申請條款的輸出幾個不同的條件在這些選擇,我想能夠計數。如果有某種方式可以做到這一點,或者建議如何以更好的方式做到這一點,這將有助於。

謝謝,如果沒有清楚解釋,請讓我知道。

+0

:Oracle數據庫12c中你可以使用'CROSS APPLY'或'橫向直列view',也簡單連接在很多情況下已經足夠 - 但它取決於在你的查詢中,很難說只看模糊的僞代碼。 – krokodilko

+0

對不起,我會告訴你整個代碼,但我受我的公司政策約束不。結構完全相同,只是在where子句中有大量選定的字段和表達式。 部分原因我不想加入我的原始查詢中的TERMS,因爲TERMS是一個頻繁更新且相當大的代碼塊。如果有兩個維護可能會變得非常困難。 –

回答

0

會不會是WITH Clause : Subquery Factoring子句可以在您的情況幫:

WITH TERMS AS (
     SELECT Field1 
      ,Field2 
     FROM 
     --various tables 
     WHERE 
     --various expressions 
) 

SELECT TERMS.Field1 
    , TERMS.Field2 
    , DISC.Field3 
    , (
     SELECT Count(*) 
     FROM TERMS 
     WHERE 
     --various conditions 
    ) 
FROM TERMS, 
(
     SELECT Field3 
     FROM 
     --various tables 
     WHERE 
     --various expressions 
) DISC 
WHERE 
    --various expressions 
+0

我測試了這個,它也能工作,謝謝 –

0

目前尚不清楚爲什麼你問 - 雖然它可能不是最有效的解決方案,但你在僞代碼中顯示的內容應該工作得很好。你試過了嗎?如果你沒有,爲什麼不先試,然後在這裏問?如果你確實嘗試過,發生了什麼?

無論如何,您可以將COUNT(*)作爲解析函數添加到內部查詢中。讓TERMS

(
    select Field1, Field2, 
     Count(*) over() as cnt -- If you don't need an analytic clause 
    from [various tables] 
    ... 
) TERMS 

,然後選擇cnt與外部查詢其他列一起。

您也可以使用partition by...order by...以及解析COUNT()函數中的窗口子句。谷歌「Oracle分析功能」,如果你不熟悉它們,或者發佈你的實際查詢,如果你需要特定的幫助。

+0

當使用此查詢時,我得到的錯誤消息是「ORA-00942:表或視圖不存在」指向第6行。我將嘗試分析函數,因爲這可能正是我需要的。謝謝。 –

+0

標記爲已解決,雖然我的原始問題尚未得到解答,但我的問題已得到解決。再次感謝!! –

+0

@SidhwenKhorest - 當然,您在原始文章中沒有提供任何實際的表格名稱,所以我提供的解決方案無法正常工作。你必須適應你的真實情況。 – mathguy