Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中两个表的合并和计数_Sql - Fatal编程技术网

SQL中两个表的合并和计数

SQL中两个表的合并和计数,sql,Sql,我一直在努力寻找一个合适的答案,所以我非常感谢你的帮助 我有两个要合并的表 表1包含机场/车站数据: id | name | country ----+----------+-------- ABC | Paris | France DEF | New York | USA GHI | Madrid | Spain 表2包含预订数据: bid | origin | destination | vehicle ----+--------+-------------+-----

我一直在努力寻找一个合适的答案,所以我非常感谢你的帮助

我有两个要合并的表

表1
包含机场/车站数据:

id  | name     | country
----+----------+--------
ABC | Paris    | France
DEF | New York | USA
GHI | Madrid   | Spain
表2
包含预订数据:

bid | origin | destination | vehicle
----+--------+-------------+--------
123 | ABC    | XYZ         | plane
456 | XYZ    | GHI         | train
789 | GHI    | XYZ         | bus
999 | DEF    | ABC         | plane
我希望有一个完整的表格,可以显示每辆车在每个机场/车站的预订量,因此可以如下所示:

id  | name     | country | bookings | plane | train | bus
----+----------+---------+----------+-------+-------+----
ABC | Paris    | France  | 2        | 2     | 0     | 0
DEF | New York | USA     | 1        | 1     | 0     | 0        
GHI | Madrid   | Spain   | 2        | 0     | 1     | 1      
有没有办法做到这一点

到目前为止,我在这里

SELECT a.id, a.name, a.country, vehicle_type, count(bid)
FROM Table2
LEFT JOIN Table1 a ON a.id = origin <> destination
GROUP BY id, name, country, vehicle_type
选择a.id、a.name、a.country、车辆类型、计数(投标)
来自表2
a.id=起点-终点上的左联接表1 a
按id、名称、国家/地区、车辆类型分组

您可以使用以下解决方案,使用
SUM
CASE
对不同列中的车辆进行计数:

SELECT t1.id, t1.name, t1.country,
  COUNT(bid) AS bookings,
  SUM(CASE WHEN t2.vehicle = 'plane' THEN 1 ELSE 0 END) AS plane,
  SUM(CASE WHEN t2.vehicle = 'train' THEN 1 ELSE 0 END) AS train,
  SUM(CASE WHEN t2.vehicle = 'bus' THEN 1 ELSE 0 END) AS bus
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.origin OR t1.id = t2.destination
GROUP BY t1.id, t1.name, t1.country
ORDER BY t1.id ASC

注意:如果您想查看每个车站/机场(也没有预订),您可以使用 一个
左连接
而不是
内部连接