2013 년 1 월에 날짜가있는 행이 세 개있는 경우 행 수가 세 개인 행이 4 개인 경우 당신의 기본 데이터가 새 테이블 밖으로되지 않습니다 변경할 때SQL - 월 기반 열 및 연도 기반 행을 사용하여 사용자 지정 테이블 만들기
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013 3 0 0 0 0 0 0 0 0 0 0 0
2014 0 0 4 0 0 0 0 0 0 5 0 0
2013 년 1 월에 날짜가있는 행이 세 개있는 경우 행 수가 세 개인 행이 4 개인 경우 당신의 기본 데이터가 새 테이블 밖으로되지 않습니다 변경할 때SQL - 월 기반 열 및 연도 기반 행을 사용하여 사용자 지정 테이블 만들기
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013 3 0 0 0 0 0 0 0 0 0 0 0
2014 0 0 4 0 0 0 0 0 0 5 0 0
내가 오히려 새 테이블보다 뷰를 사용하여이 방법을 추천 할 것입니다 : 2014 년 10 월 년 3 월 2014 오 테이블은로 표시 할 동기화. 당신은 많은 샘플 데이터를 제공하지 않았으므로
나는 구조를 생각해야했다,하지만 당신은 다음과 같이 할 것 : 나는 당신이 원하는 것을 모르는
CREATE TABLE T (`Date` DATETIME);
INSERT T (`Date`)
VALUES
('2013-01-01'), ('2013-01-02'), ('2013-01-03'),
('2014-03-01'), ('2014-03-02'), ('2014-03-03'),
('2014-10-01'), ('2014-10-01'), ('2014-10-01'),
('2014-10-01'), ('2014-10-01');
CREATE VIEW V
AS
SELECT YEAR(`Date`) AS `Year`,
COUNT(CASE WHEN MONTH(`Date`) = 1 THEN 1 END) AS `Jan`,
COUNT(CASE WHEN MONTH(`Date`) = 2 THEN 1 END) AS `Feb`,
COUNT(CASE WHEN MONTH(`Date`) = 3 THEN 1 END) AS `Mar`,
COUNT(CASE WHEN MONTH(`Date`) = 4 THEN 1 END) AS `Apr`,
COUNT(CASE WHEN MONTH(`Date`) = 5 THEN 1 END) AS `May`,
COUNT(CASE WHEN MONTH(`Date`) = 6 THEN 1 END) AS `Jun`,
COUNT(CASE WHEN MONTH(`Date`) = 7 THEN 1 END) AS `Jul`,
COUNT(CASE WHEN MONTH(`Date`) = 8 THEN 1 END) AS `Aug`,
COUNT(CASE WHEN MONTH(`Date`) = 9 THEN 1 END) AS `Sep`,
COUNT(CASE WHEN MONTH(`Date`) = 10 THEN 1 END) AS `Oct`,
COUNT(CASE WHEN MONTH(`Date`) = 11 THEN 1 END) AS `Nov`,
COUNT(CASE WHEN MONTH(`Date`) = 12 THEN 1 END) AS `Dec`
FROM T
GROUP BY YEAR(`Date`);
0 레코드가있는 달이 표시 될지 잘 모르겠습니다. 카운트 대신 sum (case 등 다음에 1 else 0 end)을 사용할 것입니다. –
@DanBracuk 두 가지 방법이 똑같이 작동하므로 차이가 없습니다. (바이올린을 확인하십시오. 질문에 정확히 표시된대로 표시됩니다.) 단순히 개인적인 취향입니다. 나는 개인적으로'COUNT'를 원할 때'COUNT'를 사용하고 SUM을 원할 때'SUM'을 사용하는 것이 더 합리적이라고 생각합니다. – GarethD
에 대한 자세한 내용은'COUNT (사례 ...)'대 SUM (사례 ...)'http://dba.stackexchange.com/q/27558/7257 – GarethD
을 달성하지만 테이블 디자인이 그것을위한 최상의 방법이라고는 생각하지 않습니다. –