这一直是我的头脑。我已经浏览了互联网(包括这个地方)并找不到解决方案。所以作为最后的手段,我希望这个论坛的好人能够帮助我。
我有两张桌子:
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//
如果有一个或多个TitleID处于NULL状态,则此方法有效;但是如果没有值为NULL,则Count()在值应为0时仍返回值。
我做错了什么?
答案 0 :(得分:1)
而不是:
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
表达式可以区分这两种情况。
答案 1 :(得分:0)
我想在这里提一个简单的概念,只要在特定列为null
时继续计算行数。
select count(*) from table_name where column_name is null