Mysql “子查询返回多行”时使用大小写
当用户有两个大人和一个小孩预订时,我似乎很难给他们折扣……输出文本如标题所示。虽然我知道这个问题,但我不确定如何解决它,使结果更加独特 作为参考,价格来自另一个表,但其他一切都在预订中 感谢您的帮助Mysql “子查询返回多行”时使用大小写,mysql,case,Mysql,Case,当用户有两个大人和一个小孩预订时,我似乎很难给他们折扣……输出文本如标题所示。虽然我知道这个问题,但我不确定如何解决它,使结果更加独特 作为参考,价格来自另一个表,但其他一切都在预订中 感谢您的帮助 UPDATE BOOKING SET TotalCost= (SELECT SUM( CASE WHEN NumAdults = 2 AND NumChilds = 1 THEN (NumAdults*(SELECT Cost FROM prices WHERE AgeType = 'Adult'
UPDATE BOOKING SET TotalCost=
(SELECT SUM(
CASE WHEN NumAdults = 2 AND NumChilds = 1 THEN
(NumAdults*(SELECT Cost FROM prices WHERE AgeType = 'Adult'))
+
(NumChilds*(SELECT Cost FROM prices WHERE AgeType = 'Child' / 2))
ELSE
(NumAdults*(SELECT Cost FROM prices WHERE AgeType = 'Adult'))
+
(NumChilds*(SELECT Cost FROM prices WHERE AgeType = 'Child'))
END
))
WHERE BookID = 1
此NumAdults*的所有发生从AgeType=‘成人’的价格中选择成本
应为NumAdults*从AgeType=‘成人’的价格中选择SUMCost
在这里,您将Numadults与resultset相乘
希望这有帮助基本修复方法是在子查询中求和:-
UPDATE BOOKING SET TotalCost=
(
CASE
WHEN NumAdults = 2 AND NumChilds = 1
THEN
(NumAdults * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Adult'))
+
(NumChilds * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Child' / 2))
ELSE
(NumAdults * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Adult'))
+
(NumChilds * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Child'))
END
)
WHERE BookID = 1
但我不相信如果我们能看到表描述和一些示例数据,没有更好的方法来完成整个查询
例如,如果成人和儿童的价格是唯一的,那么可以这样做:-
UPDATE BOOKING a
LEFT OUTER JOIN prices pa ON pa.AgeType = 'Adult'
LEFT OUTER JOIN prices pc ON pc.AgeType = 'Child'
SET TotalCost = CASE
WHEN NumAdults = 2 AND NumChilds = 1
THEN NumAdults * pa.Cost + (NumChilds * pc.Cost / 2)
ELSE NumAdults * pa.Cost + NumChilds * pc.Cost
END
WHERE BookID = 1
考虑提供“创建”和“插入”语句,并且期望的结果是,对于成人的AgType只有一行,而对于一个孩子的AgType的成本只有一行呢?这一个工作,在我的部分是一个相当业余的错误,所以谢谢帮助……标记为解决……也感谢其他的Puffin Suin快速回答。