Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 将历史值的百分比变化和范围添加到Pivot查询的结果中_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将历史值的百分比变化和范围添加到Pivot查询的结果中

Sql 将历史值的百分比变化和范围添加到Pivot查询的结果中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张桌子:比赛和赔率。一场比赛有很多赔率,包括每匹马的历史赔率。在我的数据透视表中,我显示了每个网站每匹马的平均历史价格 我想再添加两列:一列计算百分比变化百分比变化=第一个奇数最后一个奇数÷第一个奇数×100,另一列包括字段中的所有历史赔率。我不知道如何在聚合中包含这两个字段的数据。有什么想法吗 预期结果 | Name | OddsRaceID | ABC | DEF | GHI | IJK | OPQ | % | All HistorOdds|

我有两张桌子:比赛和赔率。一场比赛有很多赔率,包括每匹马的历史赔率。在我的数据透视表中,我显示了每个网站每匹马的平均历史价格

我想再添加两列:一列计算百分比变化百分比变化=第一个奇数最后一个奇数÷第一个奇数×100,另一列包括字段中的所有历史赔率。我不知道如何在聚合中包含这两个字段的数据。有什么想法吗

预期结果

|     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”,每匹马应该有一个记录