2010-11-19 5 views
2

나는 아침부터 이것을 시도하고 있으며 이제는 피곤하다. 이런 종류의 결과가 필요합니다. alt textmysql query help

다음 표를 참조하십시오.

alt text alt text alt text

누군가가 저를 도와주세요. 나는 심지어 PHP로하는 방법을 알아낼 수 없습니다. 나는 지불과 송장 테이블을 날짜에 썼지 만 헛되이 시도했다.

구매 시스템과이 쿼리는 모든 지불 및 요약 인보이스를 날짜별로 보여줍니다.

나는 먼저 청구서에서 모든 날짜를 선택한 다음 지불에서 모든 날짜를 선택하고 해당 조합을 가져 오는 솔루션을 생각했습니다. 그런 다음 해당 날짜에 인보이스가 있는지 확인한 다음 해당 날짜에 지불이 있는지 확인하십시오. 하지만 이렇게하면 쿼리가 너무 많아집니다.

+0

자세한 내용은 도움이 될 것입니다. 이것은 테이블 사이에 어떤 제약이 있는지, 인보이스 총계와 지불액이 나타내는 것 (companyId 또는 no로 구분되어 있습니까?)을 보여주지는 않습니다. – justkt

+0

mysql 파일을 추가했습니다. 도움이되기를 바랍니다. – mysterious

+0

좋아요. 아래 답변은 도움이되지 않습니까? – GolezTrol

답변

2
select 
    x.date, 
    sum(x.invoiceTotal) as invoiceTotal, 
    sum(x.paymentsMade) as paymentMade 
from 
(select 
    i.date, 
    sum(i.rate * i.quantity /*?*/) as invoiceTotal, 
    null as paymentMade  
from 
    invoice i 
    inner join invoiceitem ii on ii.invoiceId = i.invoiceId 
group by 
    i.date 
union all 
select 
    p.date, 
    null as invoiceTotal, 
    sum(p.amount) as paymentMade  
from 
    payment p 
group by 
    p.date) x 
group by 
    x.date 
order by 
    x.date 
+0

대시를 실제로 출력하려면 ifnull (sum (x.invoiceTotal), '-')을 사용할 수 있습니다. – GolezTrol

+0

[Err] 1054 - 'field list'의 'i.rate'열이 올바르지 않습니다. – mysterious

+0

일부 오류는 있지만이 쿼리를 사용하여 다른 쿼리를 작성했지만이 솔루션을 수락합니다. 나는 그 쿼리도 공유 할 것이다. 다른 사용자에게이 답변을 수정할 수 있기를 바랍니다. – mysterious

0
select 
    x.date, 
    sum(x.invoiceTotal) as invoiceTotal, 
    sum(x.paymentMade) as paymentMade 
from 
(SELECT 
Sum((invoiceitem.rate * invoiceitem.quantity)) AS invoiceTotal, 
invoice.`date`, 
null AS paymentMade 
FROM 
     invoice 
     Left Join invoiceitem ON invoice.invoiceId = invoiceitem.invoiceId 
where companyId='6' 
GROUP BY 
     invoice.`date` 
UNION ALL 
SELECT 
null as invoiceTotal, 
    payment.date, 
    sum(payment.amount) as paymentMade  
from 
    payment 
group by 
    payment.date) x 
group by 
    x.date 
order by 
    x.date