Sql 将历史值的百分比变化和范围添加到Pivot查询的结果中
我有两张桌子:比赛和赔率。一场比赛有很多赔率,包括每匹马的历史赔率。在我的数据透视表中,我显示了每个网站每匹马的平均历史价格 我想再添加两列:一列计算百分比变化百分比变化=第一个奇数最后一个奇数÷第一个奇数×100,另一列包括字段中的所有历史赔率。我不知道如何在聚合中包含这两个字段的数据。有什么想法吗 预期结果Sql 将历史值的百分比变化和范围添加到Pivot查询的结果中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张桌子:比赛和赔率。一场比赛有很多赔率,包括每匹马的历史赔率。在我的数据透视表中,我显示了每个网站每匹马的平均历史价格 我想再添加两列:一列计算百分比变化百分比变化=第一个奇数最后一个奇数÷第一个奇数×100,另一列包括字段中的所有历史赔率。我不知道如何在聚合中包含这两个字段的数据。有什么想法吗 预期结果 | Name | OddsRaceID | ABC | DEF | GHI | IJK | OPQ | % | All HistorOdds|
| Name | OddsRaceID | ABC | DEF | GHI | IJK | OPQ | % | All HistorOdds|
|----------|------------|--------|--------|--------|--------|--------|-----|---------------|
| Jonner | 1 | 2.032 | (null) | (null) | (null) | (null) |13.3%| 1.50,1.60,1.70|
| Seller | 1 | (null) | (null) | (null) | (null) | (null) |-63.6% | 11,12,4 |
| Show off | 1 | (null) | (null) | (null) | 5.4166 | (null) | ..% | 9,3,4 |
| Stander | 1 | (null) | 1.5933 | (null) | (null) | (null) | ..% | 1.40 |
| Super | 1 | (null) | (null) | 5.2 | (null) | (null) | ..% | 5,5.5,6.5 |
| Taryn | 1 | (null) | (null) | (null) | (null) | 11.5 | ..% | 15,12 |
这是编辑-更正了打字错误
下面是一个使用子查询和简单联接的选项
范例
返回
编辑-已更正输入错误
下面是一个使用子查询和简单联接的选项
范例
返回
试试这个:
SELECT A.*,
B.Percentage as '%Change',
C.All_HistorOdds
FROM
(
SELECT piv1.*
FROM
(SELECT * FROM
(SELECT Name, AVG(Odds) AS Odds, WebsiteName,OddsRaceID FROM ArbiOdds GROUP BY WebsiteName, Name, OddsRaceID) AS SourceTable
PIVOT
(
AVG(Odds)
FOR WebsiteName IN
([ABC],[DEF],[GHI],[IJK],[OPQ])
) as bob
) piv1
) as A
INNER JOIN
(
SELECT ROUND(((first_odd-last_odd)*1.0/first_odd) * 100,1) as Percentage,FIRST.Name
FROM
(
SELECT odds as first_odd,Name
FROM
(
SELECT odds,Name, ROW_NUMBER()OVER(PARTITION BY oddsID,NAME ORDER BY DateUTC ASC) as rownumber
FROM ArbiOdds
WHERE OddsID = 1
) as GET_FIRSTODD
WHERE GET_FIRSTODD.rownumber = 1
) as FIRST
INNER JOIN
(SELECT odds as last_odd,Name
FROM
(
SELECT odds,Name, ROW_NUMBER()OVER(PARTITION BY oddsID,NAME ORDER BY DateUTC DESC) as rownumber
FROM ArbiOdds
WHERE OddsID = 1
) as GET_FIRSTODD
WHERE GET_FIRSTODD.rownumber = 1
) as LAST
ON LAST.Name = FIRST.Name
) as B
ON B.Name = A.Name
INNER JOIN
(
SELECT Name,STUFF((
SELECT ',' + cAST(Odds as varchar(50))
FROM ArbiOdds as A
WHERE OddsID = 1 AND A.Name = B.Name
FOR XML PATH ('')),1,1,'') as 'All_HistorOdds'
FROM ArbiOdds as B
GROUP BY Name
) as C
ON C.Name = A.Name
试试这个:
SELECT A.*,
B.Percentage as '%Change',
C.All_HistorOdds
FROM
(
SELECT piv1.*
FROM
(SELECT * FROM
(SELECT Name, AVG(Odds) AS Odds, WebsiteName,OddsRaceID FROM ArbiOdds GROUP BY WebsiteName, Name, OddsRaceID) AS SourceTable
PIVOT
(
AVG(Odds)
FOR WebsiteName IN
([ABC],[DEF],[GHI],[IJK],[OPQ])
) as bob
) piv1
) as A
INNER JOIN
(
SELECT ROUND(((first_odd-last_odd)*1.0/first_odd) * 100,1) as Percentage,FIRST.Name
FROM
(
SELECT odds as first_odd,Name
FROM
(
SELECT odds,Name, ROW_NUMBER()OVER(PARTITION BY oddsID,NAME ORDER BY DateUTC ASC) as rownumber
FROM ArbiOdds
WHERE OddsID = 1
) as GET_FIRSTODD
WHERE GET_FIRSTODD.rownumber = 1
) as FIRST
INNER JOIN
(SELECT odds as last_odd,Name
FROM
(
SELECT odds,Name, ROW_NUMBER()OVER(PARTITION BY oddsID,NAME ORDER BY DateUTC DESC) as rownumber
FROM ArbiOdds
WHERE OddsID = 1
) as GET_FIRSTODD
WHERE GET_FIRSTODD.rownumber = 1
) as LAST
ON LAST.Name = FIRST.Name
) as B
ON B.Name = A.Name
INNER JOIN
(
SELECT Name,STUFF((
SELECT ',' + cAST(Odds as varchar(50))
FROM ArbiOdds as A
WHERE OddsID = 1 AND A.Name = B.Name
FOR XML PATH ('')),1,1,'') as 'All_HistorOdds'
FROM ArbiOdds as B
GROUP BY Name
) as C
ON C.Name = A.Name
今天是星期五,我想没有人想处理存储在列中的CSV值。将HistoricalOffics设为另一个具有1:N关系的表,并停止在列中连接数据块。今天是星期五,我认为没有人想处理存储在列中的CSV值。将HistoricalOffics设置为另一个具有1:N关系的表,并停止连接列中的数据块。在最后一列中,所有_HistoroDs的数字显示为.50001.60001.7000,而不是1.50000、1.60000、1.700000。如何管理?我也注意到了这个问题,但没有发现STUFF函数有任何问题,你能试着用你的MS跑步吗?我现在再次检查,我在以前的尝试中使用了类似的stuff函数:STUFFSELECT distinct'、“+QUOTENAMEWebsiteName FROM Arbiods FOR XML PATH、TYPE.value'、“NVARCHARMAX”、1、1、,在最后一列中,所有历史记录的数字显示为.50001.60001.7000,而不是1.50000、1.60000、1.700000。该如何管理?我也注意到了这个问题,但没有发现STUFF函数有任何问题,您可以尝试在MS中运行吗?我现在再次检查,我在以前的尝试中使用了类似的stuff函数:STUFFSELECT distinct'、“+QUOTENAMEWebsiteName FROM Arbiods FOR XML PATH、TYPE.value'、“NVARCHARMAX”、1、1、,我刚刚注意到,在这里“B on B.Name=piv1.Name和B.OddsID=piv1.OddsRaceID”您将OddsID与OddsRaceID连接起来,这不应该匹配。每个奇数都有一个OddsID,ArbiRace.OddsRaceID是的外键ArbiRaceRaceID@alwaysVBNET您的示例密钥有点通用,所以我做了一个假设。调查it@alwaysVBNET有点卡住了。您是否期望通过名称、RaceID和oddsid获得多条记录?我认为通用查询应该适用于所有种族。然后我可以添加“where RaceID=n”我刚才注意到的每匹马都应该有一条记录“B on B.Name=piv1.Name和B.OddsID=piv1.OddsRaceID”您将OddsID与OddsRaceID合并,而OddsRaceID不应该匹配。每个奇数都有一个OddsID,ArbiRace.OddsRaceID是的外键ArbiRaceRaceID@alwaysVBNET您的示例密钥有点通用,所以我做了一个假设。调查it@alwaysVBNET有点卡住了。您是否期望通过名称、RaceID和oddsid获得多条记录?我认为通用查询应该适用于所有种族。然后我可以加上“where RaceID=n”,每匹马应该有一个记录