这件事一直困扰着我。我在互联网上搜索过(包括这个地方),找不到解决办法。因此,作为最后的手段,我希望这个论坛的好人能够帮助我。
我有两张桌子:
TableA
Order_detailsID
OrderID
TitleID
Return_date
TableB
TitleID
Title_name
Quantity_in_stock并希望运行一个查询,以显示剩余的'Quantity_in_stock‘。
如果'Return_date‘设置为NULL,那么它就意味着该项当前已退出--因此我一直试图对NULL值使用count()函数,并从'Quantity_in_stock’中减去它。
到目前为止,这就是我的脚本:
DELIMITER //
CREATE PROCEDURE InStock()
BEGIN
Select TableB.TitleID,
TableB.Title_name,
TableB.Quantity_in_stock AS 'Total_Stock',
COUNT(TableA.return_date IS NULL) AS 'Rented_Out',
TableB.Quantity_in_stock - COUNT(TableA.return_date IS NULL) AS 'Remaining Stock'
From TableB
LEFT JOIN TableA
ON TableA.TitleID = TableB.TitleID
GROUP BY TableB.TitleID;
END//如果在NULL处有多个TitleID中的一个,那么如果在NULL中没有值,Count()仍然返回值为1,而这个值应该是0。
我做错了什么?
发布于 2015-12-12 20:11:32
而不是:
COUNT(TableA.return_date IS NULL)用这个:
SUM(CASE
WHEN TableA.TitleID IS NULL THEN 0
WHEN TableA.return_date IS NOT NULL THEN 0
ELSE 1
END)TableA.return_date IS NULL谓词的问题是,它在两种完全不同的情况下是正确的:
TableA中没有匹配记录时TableA.return_date值是NULL。使用CASE表达式,您可以区分这两种情况。
发布于 2015-12-12 21:47:19
我想在这里提到一个简单的概念,当特定的列是null时,请继续计算行数。
select count(*) from table_name where column_name is nullhttps://stackoverflow.com/questions/34244376
复制相似问题