簡體   English   中英

如何在 Oracle 中使用分區獲取記錄計數

[英]How to Get a Count of Records Using Partitioning in Oracle

我有以下查詢:

SELECT 
    F.IID, 
    F.E_NUM AS M_E_NUM, 
    MCI.E_NUM AS MCI_E_NUM, 
    F.C_NUM AS M_C_NUM, 
    MCI.C_NUM AS MCI_C_NUM,
    F.ET_ID AS M_ET_ID, 
    EDIE.ET_ID AS ED_INDV_ET_ID,
    COUNT(*) OVER (PARTITION BY F.IID) IID_COUNT
FROM FT_T F JOIN CEMEI_T MCI ON F.IID = MCI.IID
    JOIN EDE_T EDE ON MCI.E_NUM = EDE.E_NUM
    JOIN EDIE_T EDIE ON EDIE.IID = F.IID AND EDIE.ET_ID = EDE.ET_ID
WHERE 
    F.DEL_F = 'N'
    AND MCI.EFF_END_DT IS NULL
    AND MCI.TOS = 'BVVB'
    AND EDE.PTEND_DT IS NULL
    AND EDE.DEL_S = 'N'
    AND EDE.CUR_IND = 'A'
    AND EDIE.TAR_N = 'Y'
    AND F.IID IN
        (
         SELECT DISTINCT IID 
         FROM FT_T 
         WHERE GROUP_ID = 'BG' 
            AND DEL_F = 'N' 
            AND (IID, E_NUM) NOT IN 
                (
                 SELECT IID, E_NUM FROM CEMEI_T 
                 WHERE TOS = 'BVVB' AND EFF_END_DT IS NULL
                )
        );

我基本上是從幾個表中獲取信息並創建它們的平面記錄。

一切都相應地工作,除了現在我需要找出FT_T表中是否有兩個記錄具有相同的IID並將其顯示為結果集的一部分。

我嘗試使用分區,但結果集中的所有行都返回一個計數,即使在FT_T中有 2 個具有相同IID的記錄的行也是FT_T

我最初說我從幾個表中收集信息的原因是因為如果同一IID沒有兩條記錄可用, FT_T可能沒有我需要的所有信息,所以我必須從其他表中檢索它們JOIN ed 在查詢中。 但是,我需要知道哪個FT_T.IIDFT_T有兩條記錄(或大於一條)。

也許您需要在join和過濾之前計算計數:

SELECT . . .
FROM (SELECT F.*,
             COUNT(*) OVER (PARTITION BY F.IID) as IID_CNT
      FROM FT_T F
     ) JOIN
     CEMEI_T MCI
     ON F.IID = MCI.IID JOIN
     EDE_T EDE
     ON MCI.E_NUM = EDE.E_NUM JOIN
     EDIE_T EDIE
     ON EDIE.IID = F.IID AND EDIE.ET_ID = EDE.ET_ID
 . . .

這只是一個評論/觀察,但需要格式化

您將in(...)select distinctnot in(...,...)看起來很復雜,如果某些值為 NULL,則可能會出現問題。 我建議您考慮使用 EXISTS 和 NOT EXISTS 代替。 例如

AND EXISTS (
    SELECT
        NULL
    FROM FT_T
    WHERE F.IID = FT_T.IID
    AND FT_T.GROUP_ID = 'BG'
    AND FT_T.DEL_F = 'N'
    AND NOT EXISTS (
        SELECT
            NULL
        FROM CEMEI_T
        WHERE FT_T.IID = CEMEI_T.IID
        AND FT_T.E_NUM = CEMEI_T.E_NUM
        AND CEMEI_T.TOS = 'BVVB'
        AND CEMEI_T.EFF_END_DT IS NULL
    )
)

暫無
暫無

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

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