问题描述
我正在寻找单项赛马投注的总利润
我创建了一个视图来显示下注的每个部分的赔率和回报,但是我想添加另一列(EachWayProfit)来查找总利润。尽管收到语法错误,我还是尝试简单地将两个case语句相加。
ALTER VIEW EachWayBetting
AS
SELECT rc.ID,rc.RaceDate,rc.Runners,t.NAME AS Track,h.NAME as HorseName,rc.place as FinishingPosition,rc.IndustrySP as WinOdds,(rc.IndustrySP-1) / 5 as PlaceOdds,-- // calculates profit individually on the win & place parts of an each way bet with 1/5 place terms //
(CASE WHEN TRY_CONVERT(int,rc.Place) = 1 THEN (rc.IndustrySP - 1.0) ELSE -1 END) AS WinProfit,(CASE WHEN TRY_CONVERT(int,rc.Place) <= 6 THEN (rc.IndustrySP - 1.0) / 5 ELSE -1 END) AS PlaceProfit
FROM dbo.NewRaceResult rc LEFT JOIN
track t
ON t.ID = rc.TrackID LEFT JOIN
horse h
ON h.ID = rc.HorseID
WHERE rc.Runners > 20
这将返回:
我想将下注的获胜和放置部分的总回报添加到新列-EachWayProfit
如何构造这个问题?
-- // calculates total profit on the win & place parts the each way bet //
CASE SUM(
(CASE WHEN TRY_CONVERT(int,rc.Place) = 1 THEN (rc.IndustrySP - 1.0) ELSE -1 END)
+
(CASE WHEN TRY_CONVERT(int,rc.Place) <= 6 THEN (rc.IndustrySP - 1.0) / 5 ELSE -1 END)
) AS EachWayProfit
解决方法
如果要在同一行上计算两个值的总和,则通常需要重复条件表达式,如下所示:
CASE WHEN TRY_CONVERT(int,rc.Place) = 1 THEN (rc.IndustrySP - 1.0) ELSE -1 END
+ CASE WHEN TRY_CONVERT(int,rc.Place) <= 6 THEN (rc.IndustrySP - 1.0) / 5 ELSE -1 END as EachWWayProfit
在SQL Server中,横向联接非常方便,可以避免重复:
ALTER VIEW EachWayBetting AS
SELECT
rc.ID,rc.RaceDate,rc.Runners,t.name AS Track,h.name as HorseName,rc.place as FinishingPosition,rc.IndustrySP as WinOdds,(rc.IndustrySP-1) / 5 as PlaceOdds,pr.WinProfit,pr.PlaceProfitn
pr.WinProfit - pr.PlaceProfit EachWWayProfit
FROM dbo.NewRaceResult rc
LEFT JOIN track t ON t.ID = rc.TrackID
LEFT JOIN horse h ON h.ID = rc.HorseID
CROSS APPLY (VALUES (
CASE WHEN TRY_CONVERT(int,rc.Place) = 1 THEN (rc.IndustrySP - 1.0) ELSE -1 END,CASE WHEN TRY_CONVERT(int,rc.Place) <= 6 THEN (rc.IndustrySP - 1.0) / 5 ELSE -1 END
) pr(WinProfit,PlaceProfit)
WHERE rc.Runners > 20