복붙노트

[SQL] WHERE 절에 열 별칭을 참조

SQL

WHERE 절에 열 별칭을 참조

SELECT logcount, logUserID, maxlogtm
   , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120

나는 얻다

Maxlogtm는 날짜 필드입니다. 그것은 그 날 드라이브 미친 작은 물건.

해결법

  1. ==============================

    1.

    SELECT
       logcount, logUserID, maxlogtm,
       DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
    FROM statslogsummary
    WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)
    

    일반적으로 당신은 WHERE 절에 필드 별칭을 참조 할 수 없습니다. (WHERE 절 후에 적용되며, 전체 별칭 포함 SELECT이라고 생각.)

    그러나, 다른 답변에서 언급 한 바와 같이, 당신은 선택을 치료하기 위해 SQL을 강제 할 수있는 WHERE 절을하기 전에 처리 할 수 ​​있습니다. 이것은 일반적으로 작업 또는 공통 테이블 식 (CTE)와 논리적 순서를 강제로 괄호로 이루어집니다 :

    괄호 / 부속 :

    SELECT
       *
    FROM
    (
       SELECT
          logcount, logUserID, maxlogtm,
          DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
       FROM statslogsummary   
    ) as innerTable
    WHERE daysdiff > 120
    

    또는 동일의 CTE 버전에 대한 아담의 답변을 참조하십시오.

  2. ==============================

    2.당신이 당신의 WHERE 절에 별칭을 사용하려는 경우, 당신은 선택하거나 CTE 하위에 포장해야합니다

    당신이 당신의 WHERE 절에 별칭을 사용하려는 경우, 당신은 선택하거나 CTE 하위에 포장해야합니다

    WITH LogDateDiff AS
    (
       SELECT logcount, logUserID, maxlogtm
          , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
       FROM statslogsummary
    )
    SELECT logCount, logUserId, maxlogtm, daysdiff
    FROM LogDateDiff
    WHERE daysdiff > 120
    
  3. ==============================

    3.코드를 반복하지 않고 그것을 할 수있는 가장 효과적인 방법은 대신 WHERE의 HAVING의 사용이다

    코드를 반복하지 않고 그것을 할 수있는 가장 효과적인 방법은 대신 WHERE의 HAVING의 사용이다

    SELECT logcount, logUserID, maxlogtm
       , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
    FROM statslogsummary
    HAVING daysdiff > 120
    
  4. ==============================

    4.당신이 CTE에서 모든 열을 표시하지 않으려면,이 작업을 수행하는 또 다른 방법이 적용 외부 사용하는 것입니다 :

    당신이 CTE에서 모든 열을 표시하지 않으려면,이 작업을 수행하는 또 다른 방법이 적용 외부 사용하는 것입니다 :

    select
        s.logcount, s.logUserID, s.maxlogtm,
        a.daysdiff
    from statslogsummary as s
        outer apply (select datediff(day, s.maxlogtm, getdate()) as daysdiff) as a
    where a.daysdiff > 120
    
  5. ==============================

    5.어떻게 (이 MySQL의에서 나를 위해 일한) 하위 쿼리를 사용하는 방법에 대한?

    어떻게 (이 MySQL의에서 나를 위해 일한) 하위 쿼리를 사용하는 방법에 대한?

    SELECT * from (SELECT logcount, logUserID, maxlogtm
       , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
    FROM statslogsummary) as 'your_alias'
    WHERE daysdiff > 120
    
  6. ==============================

    6.MySQL은 HAVING 작품 문서에 따라 :

    MySQL은 HAVING 작품 문서에 따라 :

  7. ==============================

    7.당신은 열 별칭을 참조 할 수 있지만 적용 CROSS / OUTER를 사용하여 정의해야합니다 :

    당신은 열 별칭을 참조 할 수 있지만 적용 CROSS / OUTER를 사용하여 정의해야합니다 :

    SELECT s.logcount, s.logUserID, s.maxlogtm, c.daysdiff
    FROM statslogsummary s
    CROSS APPLY (SELECT DATEDIFF(day, s.maxlogtm, GETDATE()) AS daysdiff) c
    WHERE c.daysdiff > 120;
    

    DB 휘티 d 혀라도

    장점 :

  8. ==============================

    8.여기에 온 것과 유사한 무언가를 찾고 있지만, CASE로를 사용하여 끝났을 때, 어디에서이 같은 : WHERE (CASE WHEN COLUMN1 = COLUMN2 THEN '1'ELSE '0'END) 0 어쩌면 당신은 WHERE 직접에 DATEDIFF를 사용할 수 = . 뭔가 같은 :

    여기에 온 것과 유사한 무언가를 찾고 있지만, CASE로를 사용하여 끝났을 때, 어디에서이 같은 : WHERE (CASE WHEN COLUMN1 = COLUMN2 THEN '1'ELSE '0'END) 0 어쩌면 당신은 WHERE 직접에 DATEDIFF를 사용할 수 = . 뭔가 같은 :

    SELECT logcount, logUserID, maxlogtm
    FROM statslogsummary
    WHERE (DATEDIFF(day, maxlogtm, GETDATE())) > 120
    
  9. from https://stackoverflow.com/questions/8370114/referring-to-a-column-alias-in-a-where-clause by cc-by-sa and MIT license