2013-01-11 1 views
3

전체 날짜 인 YYYY-MM-DD를 사용하는 테이블을 구성하려고합니다. 월 정보 만 가져 와서 월을 개별 행으로 그룹화합니다.SQL에서 월별 그룹화

Group byOrder By 명령을 사용하여 MONTH(DATE) 명령을 사용해 보았습니다. 테이블에 나열된 4 년간의 월을 반환합니다. 나는 48 개의 행을 되돌려주고, 1-12는 4 번 반복한다. 1-12의 순서대로 1 회 반환하고 싶습니다.

여기에 제가 지금까지 가지고있는 코드가 있습니다.

select MONTH(DATE) As "Month" 
from DW******.SL**** 
Group By DATE 
Order by DATE 

SQL을 사용하기 시작 했으므로 간단한 질문에 사과드립니다.

누군가가 나를 도와 줄 수 있다면. 이것은 Db이고 나는 CONVERT을 사용하려고했지만 우리 서버에서는 작동하지 않습니다.

답변

8

그룹별로 월 (날짜)을 사용할 수 없습니까?

select MONTH(DATE) As "Month" 
from DW******.SL**** 
Group By MONTH(DATE) 
Order by MONTH(DATE) 
+0

우수! 고마워, 나는 Order By에 MONTH (DATE)가 필요하다는 사실을 간과했다. – William

+1

보다 구체적으로, 문제는 당신이 'MONTH (DATE)'대신에'DATE '에 의해 그룹화되었다는 것입니다. order by는 반환되는 행의 수와 관련이 없습니다. – msmucker0527

2

당신은 당신이 정신적으로 청크 것들 아래로 (또는 단계)를 파괴 할 수 있습니다 더 복잡한 쿼리에 들어가기로 또 다른 방법은 일반적으로 당신을 도울 수 없습니다 DATE

select MONTH(DATE) As "Month" 
from DW******.SL**** 
Group By MONTH(DATE) 
Order by MONTH(DATE) 
+0

SQL은 대소 문자를 구분하지 않으므로 입력), (DATE) 또는 (date) 나는 동일한 반환을 얻는다. – William

+0

그의 요지는 전체 'DATE'대신에'MONTH (DATE) '로 그룹화하는 것이라고 생각합니다. 정확합니다. – msmucker0527

+0

@ 윌리엄 그는 단어의 대소 문자를 말하고 있지 않습니다. – BellevueBob

1

MONTH(Date)에 의해 그룹이 필요합니다 .

그것은 다음과 같이 보일 수 있습니다

WITH x as 
(fullselect1) 
fullselect2 

를 x는 fullselect1을 의미하며, X는 fullselect2에 테이블에서 사용되는 경우. 옵티마이 저가이를 수행 할 수 있지만 1 단계와 2 단계로 생각할 수 있습니다. 귀하의 경우에는

여기 여기 필요하지가 아주 잘 확장하면서,

with Q as 
(select MONTH(DATE) as mo, units 
    from DW******.SL**** 
) 
select mo, sum(units) qty_sold 
    from Q 
    group by mo 
    order by mo 

이 개념 말할 수 있고, 이해하기 쉽게 부분으로 파괴함으로써 복잡한 쿼리를 작성 할 수 있습니다.

참조 서를 보면 정보 센터에 링크가 제공됩니다. IBM은 이것을 공통 테이블 표현식이라고합니다. [CTE]

1

는 등 1 월, 2 월, 3 월, 측면에서 달이 필요한 경우, 쿼리 아래 사용

고객 SELECT MONTHNAME (CURRENT_TIMESTAMP);