2015-01-09 3 views
1

이것은 내 첫 번째 게시물이므로 게시물에 대해 잘못 처리하면 나를 교정하십시오.다중 선택 합 하위 쿼리를 수행하는 방법

낚시 경기를위한 점수 프로그램을 만들고 있습니다.

  • Fk_AnglerID
  • 을 Pk_CatchID | 열 이름 |

    :

    tblScores : 은 내가에만 관심있는 열을 나열하는 것입니다 (다음 표를 Fk_FishID

tblAnglers :

|

  • Pk_AnglerID
  • Fk_BoatID
  • 이름

tblBoats :

| 열 이름 |

지금 제가하고 싶은 것은 오일입니다 경쟁의 전체 주에 대한 점수 시트를 만드는 것입니다

  • BoatName을 Pk_BoatID. 그래서 점수의 합계를하고 각각의 외래 키를 사용하여 각 보트의 점수를 합산해야합니다. 이것은 하루 동안 완벽하게 잘 작동

    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을 사용하고 있습니다.

  • 답변

    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

    +0

    안녕하세요 귀하의 제안에 감사드립니다! 그것은 내가 달성하기를 원하는 것에 매우 가깝습니다.하지만 문제는 이것이 보트와 데이의 결과를 나눕니다. 다음과 같은 결과가 나옵니다. BoatName Day1 Day2 : Boat1 Score1 0 그리고 Boat1 0 Score2 새 행. –

    +0

    내가 원하는 것을 정확히 수행 할 수있는 방법이 없다면,이 결과를 통해 반복하여 C#으로 수정할 수 있습니다. 하지만 가능한 경우 SQL 만 사용하여이 문제를 해결하고 싶습니다. –

    +0

    나는 당신이하려는 것을 이해하지 못합니다. 이것은 귀하의 질문에있는 테이블과 정확히 같은 데이터를 보여줍니다. 바이올린을 확인하십시오. –