Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找两个CASE语句的总和-(如何使用CASE表达式或横向联接)_Sql_Sql Server_Left Join_Case_Sql View - Fatal编程技术网

Sql 查找两个CASE语句的总和-(如何使用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

我期待着找到一个总利润的双向赛马赌注

我已经创建了一个视图来显示赌注的每一部分的赔率和回报,但是我想在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 

如果要计算同一行上两个值的总和,则通常需要重复条件表达式,例如:

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;将顶部的表达式放在一边几步就得到了正确的结果。横向连接看起来更坚固,但是,将使用向前几步。将顶部的表达式放在一边几步就得到了正确的结果。横向连接看起来更坚固然而,我们将继续利用这一点