计算MSSQL中棒球统计数据的领导者变化

时间:2011-05-26 15:02:00

标签: tsql

想象一下,我有一个每周更新的MSSQL 2005表(bbstats) 团队的各种累积类别的棒球成就

    week 1
Player       H  SO   HR
Sammy        7  11    2 
Ted         14   3    0 
Arthur       2  15    0
Zach         9  14    3

    week 2
Player       H  SO   HR
Sammy       12  16    4 
Ted         21   7    1 
Arthur       3  18    0
Zach        12  18    3

我希望以文字方式突出显示每个类别的领导者都发生了变化 所以在第2周之后,没有什么可以报告命中(H);扎克已经加入了亚瑟的大部分三振出局(SO) 18;而萨米是本垒打(HR)的新领导者,有4个人

所以我想设置一个类似的过程     a)将过去的数据(第1周)保存为表​​bbstatsPrior,     b)更新bbstats以获得新结果 - 我不需要这方面的帮助     c)比较玩家(有关系)的表与每列的最大值 并且只在它们不同的地方吐出     d)转到下一栏并重复

在任何现实世界的例子中,要计算的列数要多得多

由于


回应布伦特斯的评论,我真的是在每个类别的领导者发生任何变化之后 所以我会有像

这样的东西
select top 1 with ties player 
from bbstatsPrior
order by H desc

select top 1 with ties player,H 
from bbstats
order by H desc

然后我想比较每个查询的播放器(我是否需要做临时表)。如果它们不同,我想输出第二个select语句。对于H类,Ted是两个表中的领导者,但对于其他类别,周数之间存在变化

然后我可以使用

遍历列
    select name from sys.all_columns sc
 where sc.object_id=object_id('bbstats') and name <>'player'

1 个答案:

答案 0 :(得分:0)

如果统计数量不经常变化,您可以轻松编写单个查询来获取此数据。将bbStats加入bbStatsPrior,其中bbstatsprior.week&lt; bbstats.week和bbstats.week =@weekNumber。然后在bbstats.Hits和bbstatsPrior.Hits之间做一个简单的比较,以获得你的不同。

如果统计信息经常更改,您可以使用动态SQL对匹配特定模式的所有列执行此操作,或者根据该表的sys.columns列入列列中吗?

您可以为每个统计列添加一列,以使用相关子查询指定领导者,以查找该列的最大值,并查看它是否等于当前记录。

这可能会让你开始,但我建议你发布你目前所拥有的东西,社区可以帮助你。