sql >> データベース >  >> RDS >> Oracle

Where句でAliasを使用する方法は?

    WHERE句で列エイリアスを参照することはできません。オプションは次のとおりです。

    • WHERE句でCASEステートメントを複製します
    • サブクエリを使用する:

      PROCEDURE P_LOAD_EXPIRED_ACCOUNT(pDayDiff NUMBER,
                                       ExpiredCur OUT MEGAGREEN_CUR)
      IS
      BEGIN
      
      
         OPEN ExpiredCur FOR
         SELECT x.account_name,
                x.service_type, 
                x.expired_date
           FROM (SELECT s.account_name,
                        s.service_type, 
                        CASE 
                           WHEN s.service_type = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3)
                           WHEN s.service_type = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6)
                           WHEN s.service_type = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12)        
                        END AS EXPIRED_DATE
                   FROM SUBSCRIBERS s) x
          WHERE x.expired_date - CURRENT_DATE < pDayDiff;
      
      
      END;
      

      Oracle 9i +

      WITH summary AS (
        SELECT s.account_name,
               s.service_type, 
               CASE 
                  WHEN s.service_type = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3)
                  WHEN s.service_type = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6)
                  WHEN s.service_type = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12)        
               END AS EXPIRED_DATE
          FROM SUBSCRIBERS s)
         SELECT x.account_name,
                x.service_type, 
                x.expired_date
           FROM summary x
          WHERE x.expired_date - CURRENT_DATE < pDayDiff;
      



    1. PostgreSQLでインターバル出力フォーマットを設定する方法

    2. N-HibernatewithOracleの長い文字列はエラーを引き起こします

    3. MySQL:列がnullである行の選択

    4. Oracleでテーブル定義を取得する方法は?