如何做多个select求和子查询
How to do multiple select sum sub-queries
这是我的第一个 post 所以如果我对 post 有任何不正确的地方,请纠正我。
我正在为钓鱼比赛创建计分程序。
我有以下 tables(我只打算列出感兴趣的列:
tblScores:
|列名|
- Pk_CatchID
- Fk_AnglerID
- 天
- Fk_FishID
- 积分
tblAnglers:
|列名称|
- Pk_AnglerID
- Fk_BoatID
- 姓名
tblBoats:
|列名称|
- Pk_BoatID
- 船名
现在我要做的是为整整一周的比赛(即 5 天)创造一个分数 sheet。所以我必须对分数进行求和,并使用各自的外键对每艘船的分数求和。
这是我目前拥有的:
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 |
我试过使用嵌套选择,但无法正常工作。我愿意听取有关如何解决这个问题的建议。
我的另一个想法是创建一个新的 table 并将每天的这些分数保存在那里(甚至在船上 table),但我觉得数据库的结构会不如数据会重复。但我可能是错的。
谢谢大家!
另外:我正在使用 Visual Studio 2013 (C#) 和 Microsoft SQL Server 2010。
试试这个:
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
这是我的第一个 post 所以如果我对 post 有任何不正确的地方,请纠正我。
我正在为钓鱼比赛创建计分程序。 我有以下 tables(我只打算列出感兴趣的列:
tblScores:
|列名|
- Pk_CatchID
- Fk_AnglerID
- 天
- Fk_FishID
- 积分
tblAnglers:
|列名称|
- Pk_AnglerID
- Fk_BoatID
- 姓名
tblBoats:
|列名称|
- Pk_BoatID
- 船名
现在我要做的是为整整一周的比赛(即 5 天)创造一个分数 sheet。所以我必须对分数进行求和,并使用各自的外键对每艘船的分数求和。
这是我目前拥有的:
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 |
我试过使用嵌套选择,但无法正常工作。我愿意听取有关如何解决这个问题的建议。
我的另一个想法是创建一个新的 table 并将每天的这些分数保存在那里(甚至在船上 table),但我觉得数据库的结构会不如数据会重复。但我可能是错的。
谢谢大家!
另外:我正在使用 Visual Studio 2013 (C#) 和 Microsoft SQL Server 2010。
试试这个:
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