1
ではありません記録を持っている場合は、SQLがレコードを返します。でも、それは私が次の表の構造をした別の表
候補:
CandidateId - CandidateName - Symbol
2000 - Hillary - Mobile
2001 - Trumph - Car
2002 - Jackson - Laptop
CastVote:
ID - VotedId - CandidateSymbol
1 - 234BB12344MK23468 - 2000
2 - 234BB12344MK23469 - 2000
2 - 234BB12344MK23470 - 2000
2 - 234BB12344MK23471 - 2002
ので、出力は次のようになり次のようになります。
ID - Candidate - Votes - Status
1 - 2000 - 3 - Winner
2 - 2001 - 0 - Loser
3 - 2002 - 1 - Loser
同じ候補者が同じ場合、出力はこのようになります。
ID - Candidate - Votes - Status
1 - 2000 - 2 - Winner
2 - 2001 - 1 - Loser
3 - 2002 - 2 - Winner //Returns 1 even it has no record in the **CastVote** table
使用される:私は正常に動作しますが、候補者は、任意の投票キャストを持っていない場合、それは1として、その候補者に投票数を返す次のクエリを使用しました
ID - Candidate - Votes - Status
1 - 2000 - 2 - Winner
2 - 2001 - 0 - Loser
3 - 2002 - 2 - Winner
:投票の次のクエリ:
WITH MyCTE AS (
SELECT k.CandidateName, k.Symbol, COUNT(*) AS Votes
FROM CastVote m
FULL OUTER JOIN Candidate k
ON k.CandidateId = m.CandidateSymbol
GROUP BY CandidateSymbol, k.CandidateName, k.Symbol
)
SELECT Symbol, CandidateName, Votes,CASE
WHEN DENSE_RANK()
OVER (ORDER BY Votes DESC) = 1
THEN 'Winner' ELSE 'Loser' END Status
FROM MyCTE
あなたは、このリンクをチェックして、より多くのclarity..httpsを得るためにあなたの質問を改善しようとしてくださいでき://spaghettidba.com/2015/04/24/how-to-post-at-sql-question- on-a-public-forum/ – TheGameiswar
完全外部結合のために問題が発生している可能性があります。結果セットは '候補'、null、null、nullのようなものになります。その候補が存在するため、その候補の数は1にすぎません...可能な解決策はいくつかありますが、単純な解決策はCOUNT(*) COUNT(votes)(実際にvoteテーブルのnullでない列に "votes"を置き換えます) – ZLK