Sql 仅返回具有多个正确选择的结果
我需要提出一个查询,显示哪些问题有多个正确答案。我一直在找,但找不到我需要的东西。我找到了这个,这是我想要的,但它对我不起作用,也许我做错了 这是我到目前为止所拥有的Sql 仅返回具有多个正确选择的结果,sql,sql-server,having,Sql,Sql Server,Having,我需要提出一个查询,显示哪些问题有多个正确答案。我一直在找,但找不到我需要的东西。我找到了这个,这是我想要的,但它对我不起作用,也许我做错了 这是我到目前为止所拥有的 SELECT pq.ItemID, pq.RevNum, pc.sequence, pc.correct FROM Choice pc JOIN Question pq on pc.UniqueQID = pq.UniqueQID and pc.RevNum = pq.RevNum Group BY pq.ItemID, pq
SELECT pq.ItemID, pq.RevNum, pc.sequence, pc.correct FROM Choice pc
JOIN Question pq on pc.UniqueQID = pq.UniqueQID and pc.RevNum = pq.RevNum
Group BY pq.ItemID, pq.RevNum, pc.Sequence, pc.Correct
ORDER BY ItemID, RevNum, Sequence
这将返回每个问题/修订以及所有选项的列表。结果是这样的
ItemID RevNum Seq Correct
12776 1 A 0
12776 1 B 0
12776 1 C 1
12777 1 A 0
12777 1 B 1
12777 1 C 0
12777 1 D 0
12778 1 A 1
12778 1 B 1
12778 1 C 0
12778 1 D 1
8301 3 a 1
8301 3 b 2
8301 3 c 2
8301 3 d 2
8303 3 a 2
8303 3 b 1
8303 3 c 2
8303 3 d 2
为了清晰起见,我添加了新行。选项=1正确,0或2不正确。我只需要有一个以上正确答案的问题,如上面的12778
根据上面的链接文章,我尝试了类似的方法,但没有成功。第4行的error near=表示错误
SELECT pq.ItemID, pq.RevNum, pc.sequence, pc.correct FROM pubChoice pc
JOIN pubQuestion pq on pc.UniqueQID = pq.UniqueQID and pc.RevNum = pq.RevNum
Group BY pq.ItemID, pq.RevNum, pc.Sequence, pc.Correct
HAVING Count(correct=1) > 1
ORDER BY ItemID, RevNum, Sequence
您只需要correct为1的记录,因此将其添加到where子句中。在其他组上的这个组之后,添加一个count(*),这样就可以在该count(*)上有一个having子句。 像这样的方法应该会奏效:
SELECT pq.ItemID, pq.RevNum, pc.sequence,count(*) FROM pubChoice pc
JOIN pubQuestion pq on pc.UniqueQID = pq.UniqueQID and pc.RevNum = pq.RevNum
WHERE pc.Correct = 1
Group BY pq.ItemID, pq.RevNum, pc.Sequence
HAVING Count(*) > 1
ORDER BY ItemID, RevNum, Sequence
你如何确定一个选择是正确的?你需要这样的东西:
SELECT pq.*
FROM Question pq
INNER JOIN
(
SELECT ItemID, COUNT(*) as correctCount
FROM Question q
INNER JOIN Choice c
ON c.UniqueQID = q.UniqueQID
WHERE ANSWER_IS_CORRECT
GROUP BY ItemID
HAVING COUNT(*) > 1
) mults
ON pq.ItemID = mults.ItemID
请注意,我还没有测试过这一点,但从理论上讲,只要你有办法判断一个选择是否正确,它就会起作用。它将返回所有具有多个正确答案的ItemID,然后返回ItemID上的问题以获得所有选项(您可能需要返回选择)。根据您的评论和初始问题,这似乎适用于您:
SELECT pq.ItemID,
pq.RevNum,
pc.sequence,
pc.correct
FROM Choice pc
JOIN Question pq
on pc.UniqueQID = pq.UniqueQID
and pc.RevNum = pq.RevNum
where exists (select count(*) TotalCorrect, UniqueQID, RevNum
from choice c
where correct = 1
and pc.UniqueQID = c.UniqueQID
and pc.RevNum = c.RevNum
group by UniqueQID, RevNum
having count(*) > 1);
看
结果是:
| ITEMID | REVNUM | SEQUENCE | CORRECT |
----------------------------------------
| 12778 | 1 | A | 1 |
| 12778 | 1 | B | 1 |
| 12778 | 1 | C | 0 |
| 12778 | 1 | D | 1 |
我不希望只有correct为1的记录,它不应该在where子句中。我只希望有多个正确选项的记录。你上面所说的绝对不能做到这一点。