如何进行多个选择和子查询

时间:2015-01-09 15:42:45

标签: c# sql-server select aggregate-functions multiple-tables

这是我的第一篇文章,所以如果我对帖子做错了什么,请纠正我。

我正在为钓鱼比赛创建一个得分计划。 我有以下表格(我只列出感兴趣的列:

tblScores:

|列名|

  • Pk_CatchID
  • Fk_AnglerID
  • Fk_FishID

tblAnglers:

|列名|

  • Pk_AnglerID
  • Fk_BoatID
  • 名称

tblBoats:

|列名|

  • Pk_BoatID
  • BoatName

现在我要做的是创建一整周比赛的分数表,这是5天。因此,我必须对得分进行总结,并使用相应的外键来计算每艘船的得分。

这就是我目前的情况:

Select BoatName, " +
             "Sum(tblScores.Points) AS [Day 1] " +
             "from tblScores INNER JOIN tblAnglers ON tblScores.Fk_AnglerID=tblAnglers.Pk_AnglerID " +
            " INNER JOIN tblBoats ON tblAnglers.Fk_BoatID=tblBoats.Pk_BoatID "
            + " where Day=1 GROUP BY BoatName

这一天完全正常,但我想要做的是在DataGridView中查看每天的列,然后是总列。

这样的事情:

|Boat Name|Day 1|Day 2|Day 3|Day 4|Day 5|Total|
|Example1 | 50  | 30  | 65  | 35  | 40  | 220 |
|Example2 | 40  | 50  | 70  | 35  | 30  | 225 |

我尝试过使用嵌套选择,但我无法使用它。我愿意就如何解决这个问题提出建议。

另外我的另一个想法是创建一个新表并在那里保存这些分数(甚至在船表中)但我觉得数据库的结构不如数据重复那么好。但我可能是错的。

谢谢大家!

另外:我使用的是Visual Studio 2013(C#)和Microsoft SQL Server 2010。

1 个答案:

答案 0 :(得分:0)

试试这个:

Select
    BoatName,  
    Sum(Case When Day = 1 Then tblScores.Points Else 0 End) AS [Day1],
    Sum(Case When Day = 2 Then tblScores.Points Else 0 End) AS [Day2],
    Sum(Case When Day = 3 Then tblScores.Points Else 0 End) AS [Day3],
    Sum(Case When Day = 4 Then tblScores.Points Else 0 End) AS [Day4],
    Sum(Case When Day = 5 Then tblScores.Points Else 0 End) AS [Day5],
    Sum(tblScores.Points) As Total
From tblScores 
INNER JOIN tblAnglers ON tblScores.Fk_AnglerID=tblAnglers.Pk_AnglerID
INNER JOIN tblBoats ON tblAnglers.Fk_BoatID=tblBoats.Pk_BoatID
GROUP BY BoatName
Order By BoatName

Fiddle