【问题标题】:How to do multiple select sum sub-queries如何进行多项选择和子查询
【发布时间】:2015-03-07 23:38:57
【问题描述】:

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

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

tblScores:

|列名|

  • Pk_CatchID
  • Fk_AnglerID
  • Fk_FishID
  • 积分

tblAnglers:

|列名|

  • Pk_AnglerID
  • Fk_BoatID
  • 姓名

tblBoats:

|列名|

  • Pk_BoatID
  • 船名

现在我想做的是为一整周的比赛创建一个成绩单,也就是 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。

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    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

    【讨论】:

    • 您好,谢谢您的建议!它非常接近我想要实现的目标,并且之前也得到了相同的结果,但问题是这会将结果按船和天分开。这会产生类似以下的内容: BoatName Day1 Day2: Boat1 Score1 0 然后在新行中 Boat1 0 Score2。
    • 刚刚想到,如果没有办法完全按照我的意愿行事,我可以遍历这些结果并在 C# 中修复它们。但如果可能的话,我想单独使用 SQL 来解决这个问题。
    • 我不明白你在做什么。这显示的数据与您问题中的表格完全相同。看看小提琴。
    • 是的,抱歉,您编辑的答案完美无缺。我感谢您的帮助。我现在也看到了我的问题所在。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多