다음과 같은 쿼리가 있습니다.
select distinct datepart(yy, a.date_created) as year, datepart(mm, a.date_created) as month, concat(month, '-', year) as monthyr
from dbo.assignment a
그래서 여기서 제가하려는 것은 날짜의 연도 부분, 날짜의 월 부분, 그리고 세 번째 열이 월-년이되는 것입니다.
의미, 쿼리를 실행할 때 세 개의 열
이 있어야합니다. 날짜가 2015 년 9 월 11 일이라고 가정하면
이 쿼리를 실행하면 결과는 아래와 같습니다.
Year Month YearMonth
2015 09 09-2015
하지만 쿼리를 실행하면 오류가 발생합니다.
Msg 207, Level 16, State 1, Line 6
Invalid column name 'month'.
Msg 207, Level 16, State 1, Line 6
Invalid column name 'year'.
아래 쿼리를 사용하여 올바른 결과를 얻습니다.
select distinct datepart(yy, a.date_created) as year, datepart(mm, a.date_created) as month, concat(datepart(mm, a.date_created), '-', datepart(yy, a.date_created)) as monthyr
from dbo.assignment a
연결하는 동안 datepart를 다시 사용하는 것을 피하고 싶었습니다. 그래서 나는 첫 번째 쿼리와 같은 것을 시도하고있었습니다.
동일한 결과를 얻을 수있는 다른 방법이 있습니까?
감사
중복 식을 제거하기 위해 파생 쿼리 ( select .. from select ..
)를 사용할 수 있습니다. 그렇지 않으면 동일한 선택에서 선택 출력 절에 도입 된 식별자에 액세스 할 수 없습니다.
그러나 SQL Server는 동일하게 최적화하고 '중복'식을 제거해야합니다. 뚜렷한 움직임으로도 동일한 계획을 생성 할 것이라고 확신하지만 실제 쿼리 계획 을 확인하여 확인하십시오.
파생 선택이있는 쿼리는 다음과 같습니다.
select
year, month, concat(month, '-', year) as monthyr
from (
select distinct
datepart(yy, a.date_created) as year,
datepart(mm, a.date_created) as month
from dbo.assignment a
) t
이것은 어떤 경우에는 더 깨끗한 쿼리로 이어질 수 있지만 가장 큰 개선은 아마도 줄 바꿈과 들여 쓰기를 추가하는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다