[英]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.