我确定有更好的方法可以执行此操作,因为我多次运行相同的表值函数,是否有办法从TVF中获取表格一次,然后针对它运行查询设置我的变量?
DECLARE @RUNS INT
DECLARE @WON INT
DECLARE @PERC FLOAT
SET @RUNS = (SELECT COUNT(*) FROM tvf_horse_going('Allow Me', 'HEAVY'))
SET @WON = (SELECT COUNT(*) FROM tvf_horse_going('Allow Me', 'HEAVY') WHERE PosNum = '1')
SET @PERC = (@WON * 100) / @RUNS
SELECT @RUNS As Runs, @WON As Won, @PERC As Perc
答案 0 :(得分:1)
SELECT runs
, won
, won * 100.0 / runs As perc
FROM (
SELECT Count(*) As runs
, Sum(CASE WHEN PosNum = 1 THEN 1 ELSE 0 END) As won
FROM tvf_horse_going('Allow Me', 'HEAVY')
) As results
请注意* 100.0
。这是避免使用整数数学的快速简便方法。其他[不太懒惰的]方法包括:Cast(won As decimal(5,2)) / Cast(runs As decimal(5,2))
或类似的
答案 1 :(得分:1)
select
@RUNS = count(*),
@WON = sum(case when PosNum = 1 then 1 else 0 end)
from tvf_horse_going('Allow Me', 'HEAVY')
set @PERC = (@WON * 100) / @RUNS
答案 2 :(得分:1)
您也可以使用哈希表(临时表)。
DECLARE @RUNS INT
DECLARE @WON INT
DECLARE @PERC FLOAT
SELECT * INTO #TEMP FROM tvf_horse_going('Allow Me', 'HEAVY')
SET @RUNS = (SELECT COUNT(*) FROM #TEMP)
SET @WON = (SELECT COUNT(*) FROM #TEMP WHERE PosNum = '1')
SET @PERC = (@WON * 100) / @RUNS
SELECT @RUNS As Runs, @WON As Won, @PERC As Perc