求两个 CASE 语句的总和 - (How to use a CASE expression or Lateral JOIN
Find the sum total of two CASE statements - (How to use a CASE expression or Lateral JOIN
我要查找单向赛马投注的总利润
我已经创建了一个视图来显示投注的每个部分的赔率和 returns,但我想添加另一列 (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
这个Returns:
我想将投注的赢奖和投注部分的总 returns 添加到新列 - 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 服务器中,横向连接很方便避免冗余:
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
我要查找单向赛马投注的总利润
我已经创建了一个视图来显示投注的每个部分的赔率和 returns,但我想添加另一列 (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
这个Returns:
我想将投注的赢奖和投注部分的总 returns 添加到新列 - 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 服务器中,横向连接很方便避免冗余:
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