sql >> Database teknologi >  >> RDS >> Oracle

Hvordan bruger man Alias ​​i Where-klausulen?

Du kan ikke henvise til kolonnealiaset i WHERE-sætningen - dine muligheder er:

  • repliker CASE-sætningen i WHERE-sætningen
  • brug en underforespørgsel:

    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. Hvordan laver man en sikkerhedskopi af en enkelt tabel i en postgres-database?

  2. Tilføj en CHECK-begrænsning til en eksisterende tabel i SQL Server (T-SQL)

  3. Hvordan medtager man nul/0 resultater i COUNT aggregat?

  4. 10 fakta om overvågning af databaseydeevne, der kan overraske dig