簡體   English   中英

Oracle SQL:Case 語句

[英]Oracle SQL: Case statement

我不確定將 case 語句放在 select 還是 where 子句中。 當 cnt_subj = MEPC_PL 時,我試圖從表 c 中獲取數據,然后 metric_id 將等於表 m 中的 6135。 任何人都可以幫忙嗎? 先感謝您! :)

SELECT DISTINCT
    m.metric_id         AS metric_id,
    m.subject_abbrevn   AS p_subj,
    m.table_abbrevn     AS cnt_subj,
    c.p_id              AS p_id,
    c.cnt_id            AS cnt_id,
    c.gl_id             AS gl_id,
    case c.cnt_subj
    when 'MEPC_PL' then 6135
    end m.metric_id
FROM
    T_CROMS_CAT_T   m,
    croms_qc_currency_1_v c

我認為您想在CASE表達式中添加一個ELSE條件:

SELECT DISTINCT
    m.metric_id         AS metric_id,
    m.subject_abbrevn   AS p_subj,
    m.table_abbrevn     AS cnt_subj,
    c.p_id              AS p_id,
    c.cnt_id            AS cnt_id,
    c.gl_id             AS gl_id,
    CASE c.cnt_subj WHEN 'MEPC_PL' THEN 6135 ELSE m.metric_id END AS metric_id_new
FROM T_CROMS_CAT_T m
INNER JOIN croms_qc_currency_1_v c
    ON <some join condition here>

我認為這是您正在尋找的查詢:

SELECT DISTINCT
    m.metric_id         AS metric_id,
    m.subject_abbrevn   AS p_subj,
    m.table_abbrevn     AS cnt_subj,
    c.p_id              AS p_id,
    c.cnt_id            AS cnt_id,
    c.gl_id             AS gl_id,
FROM croms_qc_currency_1_v c
INNER JOIN T_CROMS_CAT_T m ON DECODE(c.cnt_subj, 'MEPC_PL', 6135, NULL) = m.metric_id;

你真的需要DISTINCT嗎? 這些 ID 是否不止一行? 此外,如果您有其他需要翻譯的CNT_SUBJ值,您可以擴展它。

您可以將JOIN條件JOIN為:

FROM T_CROMS_CAT_T m JOIN
     croms_qc_currency_1_v c
     ON m.metric_id = 6135 AND c.cnt_subj = 'MEPC_PL'

非常重要的是:這不會妨礙優化器,因此它應該比ON子句中的DECODE()CASE表達式快得多。

暫無
暫無

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

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