想象一下,我有一个每周更新的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'
答案 0 :(得分:0)
如果统计数量不经常变化,您可以轻松编写单个查询来获取此数据。将bbStats加入bbStatsPrior,其中bbstatsprior.week&lt; bbstats.week和bbstats.week =@weekNumber。然后在bbstats.Hits和bbstatsPrior.Hits之间做一个简单的比较,以获得你的不同。
如果统计信息经常更改,您可以使用动态SQL对匹配特定模式的所有列执行此操作,或者根据该表的sys.columns列入列列中吗?
您可以为每个统计列添加一列,以使用相关子查询指定领导者,以查找该列的最大值,并查看它是否等于当前记录。
这可能会让你开始,但我建议你发布你目前所拥有的东西,社区可以帮助你。