2014-04-24 6 views
0

특정 날짜에 대해 정의 된 열의 합계를 찾아야하는 경우가 있습니다. Plese은 아래 표를 참조하십시오이에서날짜 별 데이터에 대한 SQL 쿼리

enter image description here

을, 나는 5 월 등 번호 예 : 5로 표시되는 위의 테이블 개월 (숫자의 합, 즉 3월 15일 (15) 6 월 현명한 날짜를 찾을 필요 .

select (d1+d2+d3+d4+d5+d6+d7+d8+d9+d10+d11+d12+d13+d14+d15+d16+d17+d18+d19+d20+d21+d22+d23+d24+d25+d26+d27+d28+d29+d30+d31) as HourSum from table1 where Month='<Given Month>'; 

나는 절반 또는 추가 값 열을 덜 합계 쿼리하지만 생각을하지 않습니다에)

나는 아래의 요청에 의한 각 작업에 대한 특정 월에 대한 것으로했다. 감사.

답변

1

select sum(d1)+sum(d2) HourSum from table1 group by month,year 

는 "그룹화"에 대한 참조 D1과 D2이 시도 https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

업데이트 답 :

나는 테이블 구조 만이 있어야 아주 이상한 생각 31 열 (d1-d31)을 갖는 이 아닌 하나의 열 이름 날짜. (D1)의 총 합계를

select sum(d1) +sum(d2) +sum(d3) +sum(d4) +sum(d5) +sum(d6) +sum(d7) +sum(d8)+sum(d9) +sum(d10) +sum(d11) +sum(d12) +sum(d13) +sum(d14) +sum(d15)+sum(d16) +sum(d17) +sum(d18) +sum(d19) +sum(d20)+sum(d21) +sum(d22) +sum(d23) +sum(d24) +sum(d25) +sum(d26) +sum(d27) +sum(d28) +sum(d29)+sum(d30) +sum(d31) as TotalHours 

from 
(
-- sum 15 march 2014 to 31 march 2014 

select 0 as d1,0 as d2,0 as d3, 0 as d5, 0 as d6,0 as d7, 0 as d8,0 as d9,0 as d10,0 as 11,0 as 12,0 as d13,0 as d14,sum(d15) as d15,sum(d16) as d16,sum(d17) as d17,sum(d18) as d18,sum(d19) as d19,sum(d20) as d20,sum(d21) as d21,sum(d22) as d22,sum(d23) as d23,sum(d24) as d24,sum(d25) as d25,sum(d26) as d26,sum(d27) as d27,sum(d28) as d28,sum(d29) as d29,sum(d30) as d30,sum(d31) as d31 from table1 where month = 3 and year=2014 group by Month 
)t1 

UNION ALL 
(
-- sum 1 april 2014 to 31 may 2014 

select sum(d1) as d1,sum(d2) as d2,sum(d3) as d3,sum(d4) as d4,sum(d5) as d5,sum(d6) as d6,sum(d7) as d7,sum(d8) as d8,sum(d9) as d9,sum(d10) as d10,sum(d11) as d11,sum(d12) as d12,sum(d13) as d13,sum(d14) as d14,sum(d15),sum(d15) as d15,sum(d16) as d16,sum(d17) as d17,sum(d18) as d18,sum(d19) as d19,sum(d20) as d20,sum(d21) as d21,sum(d22) as d22,sum(d23) as d23,sum(d24) as d24,sum(d25) as d25,sum(d26) as d26,sum(d27) as d27,sum(d28) as d28,sum(d29) as d29,sum(d30) as d30,sum(d31) as d31 from table1 where month in (4,5) and year=2014 group by Month 
)t2 
UNION ALL 
(
-- sum 1 june 2014 to 15 june 2014 

select sum(d1) as d1,sum(d2) as d2,sum(d3) as d3,sum(d4) as d4,sum(d5) as d5,sum(d6) as d6,sum(d7) as d7,sum(d8) as d8,sum(d9) as d9,sum(d10) as d10,sum(d11) as d11,sum(d12) as d12,sum(d13) as d13,sum(d14) as d14,sum(d15),sum(d15) as d15, 0 as d16,0 as d17, 0 as d18,0 as d19, 0 as d20, 0 as d21, 0 as d22,0 as d23,0 as d24,0 aS d25,0 AS d26,0 as d27,0 as d28,0 as d29,0 as 30,0 as 31 from table1 where month = 6 and year=2014 group by Month 
)t3 
을 D31에 - : 당신이 다음 아래와 같은 쿼리를 작성해야 15 15 년 3 월 2014 년 6 월 2014 년 데이터를 조회하려면 지금 같은 테이블 구조와 데이터를 고려 어쨌든

,

가능한 경우 테이블 구조를 변경하십시오.

+0

답장을 보내 주셔서 감사합니다. 그러나 어떻게 동적 인 날짜로 질의를 생성 할 수 있습니까? 예를 들어, 5 월 15 일에서 6 월 14 일 사이 인 경우 5 월의 sum (d15) + sum (d16) + .. sum (31)이지만 6 월 1 일부터 14 일까지는 어떨까요? 이것은 가장 혼란스러운 시나리오입니다. – Moksh

+0

@Moksh : 1 월 14 일 데이터 합계가 6 월에 표시됩니다. 특정 월의 합계를 원하면 where 절에 월 조건을 추가 할 수 있습니다. –

+0

@ ZafarMalik : 예. 하지만이 모든 것을 하나의 쿼리에 어떻게 넣을 수 있습니까? Month = '5'로 where 절을 넣으면 5 월 1 일에서 14 일까지 계산할 수 있습니다. 내가 맞습니까? – Moksh