2015-12-17 83 views
1

我有一個存儲過程下面的SQL,我需要更新:比較值的子查詢

SELECT MEM.Id, 
    EN.artistName, 
    EN.dateAdded, 
    EN.voteStatus, 
    ES.enterNextRound, 
    ES.notified, 
    ES.voted, 
    GR.genre, 
    ES.entrantId AS bandID, 
    ES.rnd2Feedback AS feedback, 
    ES.compositionVote, 
    ES.vocalsVote, 
    ES.originalityVote, 
    (SELECT COUNT(Voted) 
    FROM recEntrantStatus 
    WHERE voted = 1 
     AND roundId = 2 
     AND entrantId = ES.entrantId) CountVoted, 
    (SELECT COUNT(Voted) 
    FROM recEntrantStatus 
    WHERE roundId = 2 
     AND entrantId = ES.entrantId) CountTotalVotes, 
    (SELECT COUNT(Id) 
    FROM recMembers) TotalJudges 
    FROM recMembers AS MEM 
    LEFT JOIN recEntrantStatus AS ES 
     ON MEM.Id = ES.judgeId 
    LEFT JOIN recEntrants AS EN 
     ON ES.entrantId = EN.Id 
    LEFT JOIN recGenre AS GR 
     ON EN.genreId = GR.Id 
    WHERE MEM.Id = @memberId 
     AND ES.roundId = 2 
    ORDER BY bandID DESC 

這適用於顯示所有匹配的記錄,但我現在只是需要返回記錄,其中的價值CountVoted小於CountTotalVotes。

伊夫試圖在WHERE子句中如添加一個簡單的compatison:

AND CountVoted< CountTotalVotes 

香港專業教育學院也嘗試:

AND recEntrantStatus.CountVoted< recEntrantStatus.CountTotalVotes 

和:

CountVoted.CountVoted< CountTotalVotes.CountTotalVotes 

但是這有相同的結果這兩個領域被分類爲不明確或不存在。那麼我應該如何適應事情才能進行比較呢?

回答

3

最簡單的方法是將整個查詢扔進子查詢:

SELECT  * 
FROM  (
      --Your query here 
      ) q 
WHERE  CountVoted < CountTotalVotes 
ORDER BY bandID DESC 

編輯

我改變了列名什麼在你的查詢,你在你的描述中提到的什麼,而是你的企圖where條件。

進一步編輯

你應該更換你的ORDER BY子句外部查詢以及..在編輯

編輯

只注意到你不選擇屬性你在您的order by中使用,添加到選擇或者選擇其他屬性進行訂購

+0

This throws the以下錯誤:SQL46047 :: ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式中無效,除非還指定了TOP或FOR XML或OFFSET。 –

+0

哎呀,我會去改變,謝謝。 –

+0

@PhillHealey,pleasse查看更多編輯 – HoneyBadger