在我的方案中需要正确的SQL语句

时间:2013-03-05 19:19:41

标签: mysql .net vb.net

我遇到了在数据库中获得所需结果的问题。我想从其他表中提取总行计数,其中的条件将属于另一个表。为了说清楚,以下是示例说明。

>tblBus
>
>Bus ID ~ Day~ Type 
>
>1000 | Monday |  Public

>2000|Monday | Private

>3000|Tuesday| Public

>4000|Monday | Public


>tblReservation 
>
>Bus ID | Date

>1000   | 2013/3/4

>2000   | 2013/3/4

>3000   | 2013/3/6

假设预订日是星期一,即2013/3/4 ..我想显示星期一可用的所有PUBLIC巴士,新行有该巴士预订总数

e.g。

GeneratedTable(WHERE Date ='2013/3 / 4',Type ='Public',Day ='Monday')

>Bus ID | Day | Type | TotalNumberReservation

>1000   |Monday | Public | 1

>4000   |Monday | Public | 1

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容加入bus id上的表格,然后计算预订次数:

select b.`bus id`,
  b.day,
  b.type,
  count(r.date) TotalNumberReservation
from tblBus b
inner join tblReservation r
  on b.`bus id` = r.`bus id`
where r.date = '2013-03-04'
  and b.day = 'Monday'
group by b.`bus id`, b.day, b.type

请参阅SQL Fiddle with Demo

如果您想要返回与正确日期相匹配的所有行,即使没有预订,那么您还需要使用LEFT JOIN

select b.`bus id`,
  b.day,
  b.type,
  count(r.date) TotalNumberReservation
from tblBus b
left join tblReservation r
  on b.`bus id` = r.`bus id`
  AND r.date = '2013-03-04'
where b.day = 'Monday'
group by b.`bus id`, b.day, b.type

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

以下是生成所有公交车,日期和日期的计数的基本查询,然后您可以根据需要进行过滤:

Select a.bus_id, day, type, count(*) as TotalNumberReservation
  from tblBus a
  join tblReservation b
    on a.busId=b.busId
 group by a.bus_id,day,type