2010-09-13 50 views
0

我有一个与赛马表现相关的分贝,并且想要比较一些不同情况下的马匹记录。例如,我想看看它是如何在课程中表现出来的,它是由于跑步,跑步的路线,骑马的人以及跑步的距离。如果我们考虑这四个问题,是否可以在一个查询中提取与这些列的所有15个组合有关的数据(4个单独列,6个x对列,4 x 3列和所有4个列中的1个)?帮助比较一个sql server查询中几列的所有排列

我会解释一下设置,希望这会有所帮助。示例查询刚拉的马记录的做法是这样的:

SELECT Horse_ID, Course_ID, SUM(Won) AS Wins, COUNT(*) AS Runs 
FROM RaceDetails AS R 
INNER JOIN HorsePerfInRace AS H ON R.RaceID = H.RaceID 

的RaceDetails列表包含了比赛本身,如距离,当然和类,然后HorsePerfInRace细节信息每匹马在比赛中的表现如何(例如,完成位置)。

我正在运行SQL Server 2005,并准备查看任何方法来完成此操作。提前感谢任何人提供的善意帮助。

+0

感谢您抽出时间回答。现在的问题是这会产生任何可能的组合,而我只对第二天的特定组合感兴趣。例如,马匹会在一个路线上被一名骑师骑马,但我得到了所有骑师的成绩,这些骑师已经在过去和所有跑过的路线上骑过它。在我的表格中,马匹将会拥有的详细信息(例如骑手和课程)会记录在明天的日期。无论如何,我可以调整查询,所以它只是返回条件符合第二天的结果? – noelnoegdip 2010-09-19 22:17:06

回答

0

我想你可能对GROUP BY有兴趣ROLLUPCUBE。以下是您可以尝试的几个查询。首先是汇总。

SELECT Horse_ID, Course_ID, Class_ID, Rider_ID, Distance_ID, SUM(Won) AS Wins, COUNT(*) AS Runs 
FROM RaceDetails AS R 
INNER JOIN HorsePerfInRace AS H ON R.RaceID = H.RaceID 
GROUP BY ROLLUP (Horse_ID, Course_ID, Class_ID, Rider_ID, Distance_ID) 

和一个与立方体。

SELECT Horse_ID, Course_ID, Class_ID, Rider_ID, Distance_ID, SUM(Won) AS Wins, COUNT(*) AS Runs 
FROM RaceDetails AS R 
INNER JOIN HorsePerfInRace AS H ON R.RaceID = H.RaceID 
GROUP BY CUBE (Horse_ID, Course_ID, Class_ID, Rider_ID, Distance_ID) 

语法相似,但结果稍有不同。您可以了解更多关于汇总和立方体here