2017-12-15 1 views
1

나는 한 달과 몇 년 동안 추출 열을 포함하여 몇 개의 열로 그룹화하려고합니다. sql은 원래 날짜 열에 따라 그룹을 반환합니다. 월 및 연도로 날짜를 추출한 다음이 열을 그룹화하려면 어떻게합니까? 사용 후,group by extract sql

select Name, 
    extract(month from fill_Date) as Month, 
    extract(year from fill_Date) as Year, 
    sum(quantity) 
from TableA 
group by Name, 
    extract(month from fill_Date), 
    extract(year from fill_Date) 

또는 값을 추출하는 하위 쿼리 (인라인 뷰)를 사용하거나 CTE :

select Name, 
extract(month from fill_Date) as Month, 
extract(year from fill_Date) as Year, 
sum(quantity) 
from Table A 
group by Name,fill_Date 
+1

'fill_Date'대신 'Group By'에 'extract (Month from fill_Date), extract (year from fill_Date)'를 넣습니다. –

답변

0

당신은 절별로 그룹에 extract() 호출을 반복 할 수 있습니다 : 다음은 내 전체 SQL입니다 그룹화에 대한 열 별칭 - 당신은 쿼리의 동일한 수준의 열 별칭을 참조 할 수 없습니다 그것은 정의되어로,하지만 서브 쿼리는 이 동일한 수준하지 의미 :

select Name, 
    Month, 
    Year, 
    sum(quantity) 
from (
    select Name, 
    extract(month from fill_Date) as Month, 
    extract(year from fill_Date) as Year, 
    quantity 
    from TableA 
) 
group by Name, 
    Month, 
    Year 
,

물론 원하는 경우에도 연도와 월을 별도로 추출하지 않아도됩니다.

select Name, 
    to_char(trunc(fill_Date, 'MM'), 'MM YYYY') as month, 
    sum(quantity) 
from TableA 
group by Name, 
    trunc(fill_Date, 'MM') 

trunc(fill_Date, 'MM')이 제공 : 당신의 목표는 단지 ​​년/월 조합에 의해 그룹의 경우, 당신은 대신하여 낮과 열 값의 시간 부분 및 그룹을 무시 만들기 위해 trunc() 기능을 사용할 수 있습니다 그날 첫날 자정. 선택 목록에서 to_char()을 사용하면 월과 연도 만 표시되며, 이제는 단일 열에도 표시되고 두 개의 숫자가 아닌 문자열로 표시됩니다. 그룹 -에서 to_char()을 사용할 수 있지만 그렇게 할 필요는 없습니다.