将子行显示为列

时间:2012-09-07 04:57:21

标签: c# join datagridview

自从我对关系数据库做了大量工作以来,已经有很长一段时间了,尽管花了最后两个小时搜索互联网并做出最好的猜测,但我还是无法找到必要的SQL查询表达式。 / p>

我有三个相关的表格: 玩家 - 包含玩家列表 教练 - 包含教练名单 评估 - 将每位教练对每位球员的评价存储为数字。

因此,第三个表中的每个记录都包含一个包含PlayerID,CoachID和评级的字段。

如果我有10名球员和3名教练,那么表3应该有30条记录。

为了填充这些表,我想显示教练名称(从Coaches表中提取)并将其显示为 DataGridView 中的列,每个玩家都有一行,这样当你在教练列下的玩家行中输入一个值,值get得到了表3,并带有相应的玩家和教练ID。

我知道我在今年的Microsoft Access中做过类似的事情,但我无法弄清楚如何在数据集中构建查询,以便我可以将其绑定到的DataGridView

我尝试使用以下SQL查询,但它不允许我编辑Coach1和Coach2列中的值。我怀疑那是因为我在PlayerList和Evaluations之间存在一对多的关系,而Coach和Evaluations之间存在一对多的关系:

SELECT        PlayerList.Number, PlayerList.Name, PlayerList.Year, PlayerList.Height, PlayerList.Notes, PlayerList.AverageSkill, AVG(Evaluations.Skill) AS CoachSkill, 
                         'SELECT Skill FROM Evaluations 
WHERE (PlayerID = PlayerList.Number) AND (CoachID = 1)' AS Coach1, 
                         'SELECT Skill FROM Evaluations 
WHERE (PlayerID = PlayerList.Number) AND (CoachID = 2)' AS Coach2
FROM            Evaluations RIGHT OUTER JOIN
                         PlayerList ON Evaluations.PlayerID = PlayerList.Number
GROUP BY PlayerList.Number, PlayerList.Name, PlayerList.Year, PlayerList.Height, PlayerList.Notes, PlayerList.AverageSkill

任何帮助都将不胜感激。

应用程序详细信息:我正在使用带有SQL-Server-CE数据库的Visual Studio Express中的C#。

更多的阅读让我相信我想要的是一个SQL-Server-CE不支持的PIVOT函数。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以创建新的DataRows并动态添加列。然后将所有创建的行添加到DataGridView。

答案 1 :(得分:0)

这与嵌套网格有关,作为分层数据

通过此链接详细说明如何在像您这样的场景中使用gridview / datgrids。

http://msdn.microsoft.com/en-us/magazine/cc164077.aspx

希望这能解决您的问题。