2016-06-20 9 views
0

以下のコードを実行しているときにSELECT TOPを使用している理由がわかりません。クエリを実行すると出力が表示されませんが、何が問題なのか誰にでも見えますか?SELECT TOPを使用するとサブクエリが1つ以上の値を返しました

サブクエリが1より大きい値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

;WITH cte AS 
(
    SELECT f.FixtureID, 
     ht.FinalTeamWeight - at.FinalTeamWeight AS TeamScore 
    FROM dbo.Fixture f 

... 

) 


UPDATE f 
SET f.HomeScore = s.HomeScore, 
    f.AwayScore = s.AwayScore 
FROM dbo.Fixture f 
INNER JOIN 
(
    SELECT FixtureID, 
    TeamScore, 
    (
     SELECT 
     CASE 
      WHEN c.TeamScore BETWEEN HomeWeighting AND AwayWeighting AND HomeScore > AwayScore AND s.ScoreDifference = sr.ScoreDifference 
       THEN (SELECT TOP 1 ScoreID FROM dbo.Score WHERE HomeScore > AwayScore AND ScoreDifference = 1 ORDER BY NEWID())  
     END AS ScoreID 
     FROM dbo.Score s 
     LEFT JOIN ScoreReference sr 
     ON s.ScoreDifference = sr.ScoreDifference 

    ) AS ScoreID -- end select case 

FROM cte c 

) -- end inner join 

AS ScoreResult 
    ON f.FixtureID = ScoreResult.FixtureID 
INNER JOIN Score s 
    ON ScoreResult.ScoreID = s.ScoreID 
INNER JOIN ScoreReference sr 
    ON s.ScoreDifference = sr.ScoreDifference 

TABLES: SCORE_REFERENCE

enter image description here

SCORE:

enter image description here

+0

[最小限で完全であり、かつ検証可能な例を作成する方法](http://stackoverflow.com/help/mcve)をお読みください。 –

+1

あなたの 'SELECT CASE'は複数の結果を返します。 – Arvo

+0

ここには複数のサブクエリがあり、複数のサブクエリが単一の値を返すべき位置で使用されています。あなたの「* 1」に「TOP 1」を使用しているだけなので、他の人にこのメッセージの発信元として割り引かれているのはなぜですか? –

答えて

1

ちょうど追加TOP(1)ここでは...

SELECT TOP(1) 
     CASE 
      WHEN c.TeamScore BETWEEN HomeWeighting AND AwayWeighting AND HomeScore > AwayScore AND s.ScoreDifference = sr.ScoreDifference 
       THEN (SELECT TOP 1 ScoreID FROM dbo.Score WHERE HomeScore > AwayScore AND ScoreDifference = 1 ORDER BY NEWID())  
     END AS ScoreID 
     FROM dbo.Score s 
     LEFT JOIN ScoreReference sr 
     ON s.ScoreDifference = sr.ScoreDifference 
0

TOPを含むものではなく、それを含むものです。その上にTOP 1を追加してください

関連する問題