2013-05-16 101 views
0

我有以下两个表格SQL查询,并从多个表计数

1 BList

  • BookingID
  • AdultNo
  • ChildNo
  • BookingDate

2. BHandle

  • BookingID
  • TicketingStatus
  • FinalSellingPrice
  • FinalNett
  • 员工

什么我想要做的是让distinct StaffSum of (SellingPrice)Sum of (NettPrice)Profit (Sum of sellingPrice)- Sum of (NettPrice)),其中的和平号是(AdultNo + ChildNo)也算BookingID为无担保

的WHERE BookingDate> = FROM日期和BookingDate < = TODATE AND TicketingStatus = 'CP'

的东西,看起来像这样(在底部的总计数字没有按”因为我会将它们写入csv格式,我将处理总数),但是我需要弄清楚如何首先获取查询。

The list that i want to produce

这是查询我可以从第二个表得到BHandle

SELECT Staff, SUM(FinalSellingPrice) AS gross, SUM(FinalNett) AS cost 
FROM BHandle 
WHERE ticketingstatus ='CP' 
GROUP BY Staff 

这是我的第一个表查询BList

SELECT (adultno+childno) AS pax 
fFROM om BList 
WHERE bookingdate >='01-mar-2013 00:00' 
AND bookingdate <= '15-may-2013 23:59' 

我有不知道如何将这两个查询结合在一起。

请帮忙。要做到这一点

回答

3

像这样的东西(假设所有列非空):

select Staff, 
    sum(FinalSellingPrice) as gross, 
    sum(FinalNett) as cost, 
    sum(FinalSellingPrice - FinalNett) as profit, 
    sum(AdultNo+ChildNo) as pax, 
    count(1) as bookings 
from Blist b 
inner join BHandle bh on b.BookingID = bh.BookingID 
where b.BookingDate >= fromDate 
    and b.BookingDate <= toDate 
    and bh.TicketingStatus = 'CP' 
group by staff; 
+0

谢谢。完美的作品 – ymcCole

0

一种方法是使用union all与聚合:

select staff, sum(gross) as gross, sum(cost) as cost, sum(pax) as pax, 
     sum(numbookings) as numbookings 
from ((SELECT Staff, SUM(FinalSellingPrice) AS gross, SUM(FinalNett) AS cost, 
       null as pax, null as numbookings 
     FROM BHandle 
     WHERE ticketingstatus ='CP' 
     GROUP BY Staff 
    ) union all 
     (select staff, null as gross, null as cost, (adultno+childno) AS pax , 
       count(*) as numbookings 
     from blist join 
      bhandle 
      on blist.bookingid = bhandle.bookingid 
     group by staff 
    ) 
    ) t 
group by staff 
+0

我没有按公司有员工在BList表。给我一个错误'无效的列名员工' – ymcCole