Sql 查找两个CASE语句的总和-(如何使用CASE表达式或横向联接)
我期待着找到一个总利润的双向赛马赌注 我已经创建了一个视图来显示赌注的每一部分的赔率和回报,但是我想在EachWayProfit中添加另一列来查找总利润。尽管收到语法错误,我还是尝试简单地将两个case语句相加 我在下面包括我的代码和输出Sql 查找两个CASE语句的总和-(如何使用CASE表达式或横向联接),sql,sql-server,left-join,case,sql-view,Sql,Sql Server,Left Join,Case,Sql View,我期待着找到一个总利润的双向赛马赌注 我已经创建了一个视图来显示赌注的每一部分的赔率和回报,但是我想在EachWayProfit中添加另一列来查找总利润。尽管收到语法错误,我还是尝试简单地将两个case语句相加 我在下面包括我的代码和输出 ALTER VIEW EachWayBetting AS SELECT rc.ID, rc.RaceDate, rc.Runners, t.NAME AS Track, h.NAME as HorseName, rc.place
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
如果要计算同一行上两个值的总和,则通常需要重复条件表达式,例如:
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
CASE expression.SQL Server不支持CASE Switch语句。请向我们显示您想要的结果。另外,我发现您没有解决我在空间问题上强调的设计问题,它仍然是一个varchar;CASE表达式。SQL Server不支持CASE Switch语句。请向我们显示您想要的结果。另外,我看到您你没有解决我在你的空间问题上强调的设计问题,它仍然是一个varchar;将顶部的表达式放在一边几步就得到了正确的结果。横向连接看起来更坚固,但是,将使用向前几步。将顶部的表达式放在一边几步就得到了正确的结果。横向连接看起来更坚固然而,我们将继续利用这一点