簡體   English   中英

選擇的加入

[英]joining of selects

我一直在嘗試加入具有各種變體的兩個選擇。 使用UNION給我留下了“值太多”的消息,內部聯接被完全拒絕運行,因為我沒有可聯接的實體,而且我認為這可能是正確的路徑。

我正在嘗試創建一個小表,該表包含三行(“ bu”,“ bu_plus”,“ bu_minus”)和兩列(從添加到bu名稱的選擇中匯總的數目)

這是我現在的選擇

SELECT
(SELECT LEVEL, decode(level, 1,'bu_minus', 2,'bu_plus', 3,'bu') AS kombi
FROM dual
WHERE
1 <= (SELECT (SELECT
    (
    SELECT COUNT(*)
    FROM c2
    WHERE
    --conditions A
    ) FROM dual
 ) AS bu_minus FROM dual
 AND 2 <= (SELECT (SELECT
    (
    SELECT COUNT(*)  
    FROM c2
    WHERE
    --conditions B
    ) FROM dual
 ) AS bu_plus FROM dual
AND 3 <= SELECT ((SELECT
    (
    SELECT COUNT(*)
    FROM c2
    WHERE
    --conditions A
    ) FROM dual )+
  (SELECT
    (
    SELECT COUNT(*)
    FROM c2
    WHERE
    --conditions B
    ) FROM dual)
 ) AS bu FROM dual) AS uc

 ) AS TYPE FROM dual CONNECT BY LEVEL <= 3
;

這看起來像是一種非常非常復雜的方法(並且可能是錯誤的;一開始您從對偶中選擇的太多!)。

在沒有輸入數據和預期輸出的情況下,我認為您嘗試做的事情可能更容易寫成:

SELECT *
FROM   (SELECT COUNT(CASE WHEN <conditions A> THEN 1 END) bu_minus,
               COUNT(CASE WHEN <conditions B> THEN 1 END) bu_plus,
               COUNT(CASE WHEN <conditions A> THEN 1 END) + COUNT(CASE WHEN <conditions B> THEN 1 END) bu
        FROM   c2
        WHERE  <conditions A>
        OR     <conditions B>)
UNPIVOT (counts FOR bu_type IN (bu_minus, bu_plus, bu));

首先通過在單行中計算條件計數,然后將其取消透視成3行來進行工作。

它具有只從主表中選擇一次的優點,並且比原始查詢要簡單得多且易於維護。

但是,這只是一個猜測,由於沒有您的更多信息,因此無法說出這是否是您真正想做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM