Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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_Ms Access - Fatal编程技术网

Sql 相关记录的有条件计数

Sql 相关记录的有条件计数,sql,ms-access,Sql,Ms Access,我相信一定有一个简单的方法可以做到这一点,但我已经把头发扯了好几个小时了,我一事无成。以下是来自客户列表实用程序的工作查询: SELECT c.customer_ID, title, surname, forenames, COUNT(booking_ID) AS bookings FROM customer c LEFT JOIN booking b ON c.customer_ID = b.customer_ID WHERE customer_Live GROUP BY c.custom

我相信一定有一个简单的方法可以做到这一点,但我已经把头发扯了好几个小时了,我一事无成。以下是来自客户列表实用程序的工作查询:

SELECT c.customer_ID, title, surname, forenames, COUNT(booking_ID) AS bookings
FROM customer c 
LEFT JOIN booking b 
ON c.customer_ID = b.customer_ID
WHERE customer_Live
GROUP BY c.customer_ID, surname, forenames, title
ORDER BY surname;

问题是:计数返回所有相关预订。但预订表中有一个“booking_Live”列,每当取消预订时,该列将设置为false。我需要做的是从计数中排除取消的预订;因此,如果客户取消了所有预订,则返回0。我曾尝试在组中添加HAVING子句,但这只会从输出中删除任何没有实时预订的客户。

子查询应该可以解决您的问题。像这样的

SELECT c.customer_ID, title, surname, forenames, COUNT(booking_ID) AS bookings
FROM customer c 
LEFT JOIN (SELECT customer_ID, booking_id FROM Booking WHERE booking_live = true) as b 
ON c.customer_ID = b.customer_ID
WHERE customer_Live
GROUP BY c.customer_ID, surname, forenames, title
ORDER BY surname;

也许我没弄清楚,但你为什么不使用:

SELECT c.customer_ID, title, surname, forenames, COUNT(booking_ID) AS bookings
FROM customer c 
LEFT JOIN booking b 
ON (c.customer_ID = b.customer_ID AND b.booking_Live = true)
WHERE customer_Live
GROUP BY c.customer_ID, surname, forenames, title
ORDER BY surname;

抱歉,我无意中贴错了答案。虽然我已经检查了你的,它也能工作。谢谢。这也不包括任何只取消预订的客户。不,没有。这是一个左连接,它将包括所有在线的客户,无论他们的预订状态如何。你不能在MS Access中这样做。是的,这立即起作用!我之前试过类似的方法,但语法不正确。谢谢。@Remou:我不知道它是access(2007)还是Jet(4)版本,也不知道它是一个使用ADO的外部应用程序,但它确实有效。它有效。。。你只需要把你的连接条件放在括号里。我不明白为什么这是在连接中而不是在WHERE子句中完成的。