2016-09-14 2 views
0

이 굵은 부분과 같은 것을하고 싶습니다. 나는 그것이 가능한지 모른다. 여기 좀 도와주세요. 부분 사이 // 시작 // // 가능합니까?동적 작업에 대한 쿼리

SELECT a.id, b.id, b.number, c.total, 

//Start 

SUM(total WHERE c.id=a.id) AS sum_total 

//End 

FROM table_1 a 
LEFT JOIN table_2 b ON a.id=b.id 
INNER JOIN table_4 ON b.company=c.company 
INNER JOIN table_3 c ON b.number=c.id_number 
WHERE b.date BETWEEN 'date_1' AND 'date_2' 
ORDER BY d.company ASC 
+0

은 당신이 결과를 예상 추가 할 수 있습니까? 나는 당신이 성취하려는 것을 이해할 수 없다. – jarlh

+0

조건과 일치하는 항목에 대해서만 항목의 합이 필요합니다. 그러나 나는이 질문을 한 직후 실제로 그것을했다. 빠른 도움에 감사드립니다. –

답변

1

물론 가능합니다. SQL 다음보십시오 :

SELECT a.id, b.id, b.number, SUM(c.total)TOTAL, 

//Start 

SUM(case when c.id=a.id then total else 0 end) AS sum_total 

//End 

FROM table_1 a 
LEFT JOIN table_2 b ON a.id=b.id 
INNER JOIN table_4 ON b.company=c.company 
INNER JOIN table_3 c ON b.number=c.id_number 
WHERE b.date BETWEEN 'date_1' AND 'date_2' 
GROUP BY 1,2,3 
ORDER BY d.company ASC 
+0

선택 목록에 c.total이 없습니까? – jarlh

+0

거기에 있습니다. SUM (c.total) TOTAL. 그는 총계 만이 아니라 총계가 필요하다고 생각합니다. 그가 필드로 총을 필요로한다면, 그는 단지 그것으로부터 합계를 제거해야하고 1,2는 단지 –

+0

이어야합니다. 아마도 당신 말이 맞을 것입니다. 나는 OP가 무엇을 찾고 있는지 이해할 수 없다. – jarlh

0

당신이 그것을 수행하는 GROUP BY을 사용하는 것, 그것은 같은 :

SELECT a.id, b.id, b.number, c.total, 

//Start 

SUM(total) AS sum_total 

//End 

FROM table_1 a 

LEFT JOIN table_2 b ON a.id=b.id 
INNER JOIN table_4 ON b.company=c.company 
INNER JOIN table_3 c ON b.number=c.id_number 
WHERE b.date BETWEEN 'date_1' AND 'date_2' AND 
     c.id = a.id 
GROUP BY a.id, b.id 

ORDER BY d.company ASC 

http://www.w3resource.com/sql/aggregate-functions/sum-with-group-by.php

+0

그 GROUP BY는 유효하지 않습니다 (적어도 최신 MySQL 버전에서는). 일반 GROUP BY 규칙은 다음과 같이 말합니다 : GROUP BY 절이 지정되면 SELECT 목록의 각 열 참조는 그룹화 열을 식별하거나 집합의 인수 여야합니다 기능! – jarlh

+0

고마워요. 도와 주셔서 감사합니다. –

관련 문제