0
我在使用MySQL数据库的旧版经典asp应用程序中使用以下查询生成报表。MySql查询加入
SELECT DISTINCT *
FROM
(SELECT b.rep_year,
b.rep_month,
sum(x.book_qty)AS salecnt,
sum(x.book_qty*x.s_price)AS Tsales
FROM report_date b
LEFT JOIN sale x ON Month(x.s_Date) = b.rep_month
AND year(x.s_Date) = b.rep_year
WHERE x.s_date <=curdate()
AND x.s_date >'2010-10-31'
GROUP BY b.rep_month,
b.rep_year)AS bob,
(SELECT c.rep_year,
c.rep_month,
sum(y.gQty) AS Tgift,
sum(y.gQty*y.gPrice)AS TGiftSum
FROM report_date c
LEFT JOIN gift y ON month(y.gDate) = c.rep_month
AND year(y.gDate)=c.rep_year
WHERE y.gbooktype =1
AND y.gdate <=curdate()
AND y.gdate>'2010-10-31'
GROUP BY c.rep_year,
c.rep_month)AS cob,
(SELECT d.rep_year,
d.rep_month,
sum(z.gQty) AS Ttgift,
sum(z.gQty*z.gprice)AS TtGiftSum
FROM report_date d
LEFT JOIN gift z ON month(z.gDate) = d.rep_month
AND year(z.gDate)=d.rep_year
WHERE z.gbooktype =2
AND z.gdate <=curdate()
AND z.gDate>'2010-10-31'
GROUP BY d.rep_year,
d.rep_month)AS dob
WHERE bob.rep_month = cob.rep_month
AND bob.rep_year=cob.rep_year
AND bob.rep_year=dob.rep_year
AND cob.rep_year=dob.rep_year
AND cob.rep_month = dob.rep_month
GROUP BY bob.rep_year,
bob.rep_month
从三个表:
report_date [rep_id, rep_month, rep_year]
sale[sale_id,book_id,book_qty,s_date,s_price]
gift[gift_id,book_id,gQty,gDate,gPrice,gbooktype]
我已经使用在应用此查询2011年以来和我已经意识到错误,这只是今天。
对于任何特定的年份和月份,如果gbooktype 1和gbooktype 2都没有赠品交易,则在报告摘要中忽略该年份和月份。我将非常感谢任何帮助,以便即使有书籍1或2的赠品交易,或者同时生成该月份和年份的报告。此外,任何查询优化帮助将不胜感激。
谢谢@Kickstart我试图运行查询,但它报告找不到一些字段。 report_date表包含从2010年1月1日至2016年12月安排的rep_year(2010年)和rep_month(月,例如2月2日,12月12日12月) – Diin
您可以使用一些示例数据设置SQL提琴,以便我可以进行测试。 – Kickstart
稍微调整了第二个工作。如果没有任何样本数据,您能够提供帮助的速度令我印象深刻 – Diin