월 및 연도 별 SQL 그룹화
"월-년"- "9-2011"과 같은 '날짜'열을 표시하기 위해 다음 SQL 쿼리에 무엇을 작성해야하는지 잘 모르겠습니다.
SELECT MONTH(date) + '.' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY MONTH(date), YEAR(date)
그래서 제가하고 싶은 것은 첫 번째 열의 데이터를 월만 표시하는 대신 월과 연도를 표시하도록 변경하는 것입니다.
SELECT CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4)) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4))
또는 @ 40-Love가 언급했듯이 선행 0으로 캐스팅 할 수 있습니다.
GROUP BY
CAST(YEAR(date) AS VARCHAR(4)) + '-' + right('00' + CAST(MONTH(date) AS VARCHAR(2)), 2)
MS SQL 구문처럼 보이는 MS SQL이라고 생각합니다.
따라서 select ex에서와 같은 것을 그룹 라인에 넣어야합니다.
Select MONTH(date)+'-'+YEAR(date), ....
...
...
...
group by MONTH(date)+'-'+YEAR(date)
내가 올바르게 이해한다면. 요청 된대로 결과를 그룹화하려면 Group By 절에 select 문과 동일한식이 있어야합니다.
GROUP BY MONTH(date) + '.' + YEAR(date)
날짜를 "월-일"형식으로 표시하려면 '.' to '-'전체 구문은 다음과 같습니다.
SELECT MONTH(date) + '-' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS
SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY MONTH(date) + '.' + YEAR(date)
위의 SQL Server 2012에서는 format () 함수를 사용하는 것을 선호합니다.
SELECT format(date,'MM.yyyy') AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY format(date,'MM.yyyy')
postgresql에서는 날짜 형식 함수 (to_char)와 날짜별로 그룹화하여 비슷한 쿼리를 작성할 수 있습니다.
SELECT to_char (datum, 'MM-YYYY') AS mjesec
FROM test
GROUP BY datum
ORDER BY datum;
SQL-Server에서도 이런 일은 확실히 가능하지 않습니까?
곱셈을 시도하여 연도와 월을 조정하여 하나의 숫자가되도록 할 수 있습니다. 내 테스트에서 이것은 format(date,'yyyy.MM'). 나는 정렬 목적으로 1 년 전을 선호합니다. MS SQL Server Express 버전 12.0에서 생성 된 코드.
SELECT (YEAR(Date) * 100) + MONTH(Date) AS yyyyMM
FROM [Order]
...
GROUP BY (YEAR(Date) * 100) + MONTH(Date)
ORDER BY yyyyMM
datetime 데이터 유형에 필드를 유지하려면 다음을 사용해보십시오.
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order] o
WHERE (idCustomer = 1) AND (o.[date] BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0)
시간, 일, 주, 년별로 그룹으로 변경하는 것도 쉽습니다.
누군가에게 유용했으면합니다.
문안 인사!
참고 URL : https://stackoverflow.com/questions/5406170/sql-grouping-by-month-and-year
'Program Club' 카테고리의 다른 글
| 내 WordPress 플러그인에 CSS 및 jQuery를 포함하는 방법은 무엇입니까? (0) | 2020.12.06 |
|---|---|
| MultiAutoCompleteTextView와 AutoCompleteTextView의 차이점 (0) | 2020.12.06 |
| MVVM이 EventArgs를 명령 매개 변수로 전달 (0) | 2020.12.06 |
| jQuery : target =“_ blank”인 URL로 이동 (0) | 2020.12.06 |
| 정수 값을 기반으로 n 항목의 배열 만들기 (0) | 2020.12.06 |